How to set a parameter in a HttpServletRequest?

后端 未结 7 900
感动是毒
感动是毒 2021-02-01 03:16

I am using a javax.servlet.http.HttpServletRequest to implement a web application.

I have no problem to get the parameter of a request using the getParamete

7条回答
  •  天命终不由人
    2021-02-01 03:34

    The most upvoted solution generally works but for Spring and/or Spring Boot, the values will not wire to parameters in controller methods annotated with @RequestParam unless you specifically implemented getParameterValues(). I combined the solution(s) here and from this blog:

    import java.util.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    
    public class MutableHttpRequest extends HttpServletRequestWrapper {
    
        private final Map mutableParams = new HashMap<>();
    
        public MutableHttpRequest(final HttpServletRequest request) {
            super(request);
        }
    
        public MutableHttpRequest addParameter(String name, String value) {
            if (value != null)
                mutableParams.put(name, new String[] { value });
    
            return this;
        }
    
        @Override
        public String getParameter(final String name) {
            String[] values = getParameterMap().get(name);
    
            return Arrays.stream(values)
                    .findFirst()
                    .orElse(super.getParameter(name));
        }
    
        @Override
        public Map getParameterMap() {
            Map allParameters = new HashMap<>();
            allParameters.putAll(super.getParameterMap());
            allParameters.putAll(mutableParams);
    
            return Collections.unmodifiableMap(allParameters);
        }
    
        @Override
        public Enumeration getParameterNames() {
            return Collections.enumeration(getParameterMap().keySet());
        }
    
        @Override
        public String[] getParameterValues(final String name) {
            return getParameterMap().get(name);
        }
    }
    
    

    note that this code is not super-optimized but it works.

提交回复
热议问题