yangys
2024-03-28 13ada1093cb8de6e31a718d2222429ded70133c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.qianwen.core.excel.extend.aop;
 
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.qianwen.core.excel.extend.annotation.ResponseExcel;
import com.qianwen.core.excel.extend.handler.SheetWriteHandler;
import org.springframework.core.MethodParameter;
import org.springframework.util.Assert;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.method.support.ModelAndViewContainer;
 
/* loaded from: blade-starter-excel-9.3.0.0-SNAPSHOT.jar:org/springblade/core/excel/extend/aop/ResponseExcelReturnValueHandler.class */
public class ResponseExcelReturnValueHandler implements HandlerMethodReturnValueHandler {
    private static final Logger log = LoggerFactory.getLogger(ResponseExcelReturnValueHandler.class);
    private final List<SheetWriteHandler> sheetWriteHandlerList;
 
    public ResponseExcelReturnValueHandler(final List<SheetWriteHandler> sheetWriteHandlerList) {
        this.sheetWriteHandlerList = sheetWriteHandlerList;
    }
 
    public boolean supportsReturnType(MethodParameter parameter) {
        return parameter.getMethodAnnotation(ResponseExcel.class) != null;
    }
 
    public void handleReturnValue(Object o, MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest nativeWebRequest) throws Exception {
        HttpServletResponse response = (HttpServletResponse) nativeWebRequest.getNativeResponse(HttpServletResponse.class);
        Assert.state(response != null, "No HttpServletResponse");
        ResponseExcel responseExcel = (ResponseExcel) parameter.getMethodAnnotation(ResponseExcel.class);
        Assert.state(responseExcel != null, "No @ResponseExcel");
        mavContainer.setRequestHandled(true);
        this.sheetWriteHandlerList.stream().filter(handler -> {
            return handler.support(o);
        }).findFirst().ifPresent(handler2 -> {
            handler2.export(o, response, responseExcel);
        });
    }
}