带有表单数据或 x-www-form-urlencoded 的 Spring Boot 过滤器

问题描述 投票:0回答:1

实际请求是使用 Content-Type application/json 然后请求将转到过滤器进行修改,将 Content-Type 更改为

multipart/form-data
然后添加硬编码的键和值作为
form-data
但我当前的设置不管用。有什么想法吗?

public class LogRequestResponseFilter implements Filter {

   

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;


       
            
            ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(httpServletRequest);
            ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(httpServletResponse);

//            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) wrappedRequest;
//            multipartRequest.getParameterMap().put("scope", new String[]{"read"});

            filterChain.doFilter(wrappedRequest, responseWrapper);

            String responseBody = getStringValue(responseWrapper.getContentAsByteArray(),servletResponse.getCharacterEncoding());

            generateTokenUriLog(responseBody,httpServletRequest,httpServletResponse);
            responseWrapper.copyBodyToResponse();

错误 如果我要取消注释此代码,这就是错误

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) wrappedRequest;

multipartRequest.getParameterMap().put("scope", new String[]{"read"});


class org.springframework.web.util.ContentCachingRequestWrapper cannot be cast to class org.springframework.web.multipart.MultipartHttpServletRequest
java spring spring-boot filter multipartform-data
1个回答
0
投票

另一种方法是使用

public void somefunction(@ModelAttribute FormData formdata){}

在您的控制器中,其中 (FormData) 是包含所有表单数据的对象

© www.soinside.com 2019 - 2024. All rights reserved.