Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 弹簧休息(MVC)。如何在控制器中处理之前修改http请求_Spring_Rest_Spring Mvc - Fatal编程技术网

Spring 弹簧休息(MVC)。如何在控制器中处理之前修改http请求

Spring 弹簧休息(MVC)。如何在控制器中处理之前修改http请求,spring,rest,spring-mvc,Spring,Rest,Spring Mvc,我想问一下。在SpringREST(MVC)控制器中处理之前,如何修改http请求 据我所知,我可以通过过滤器和定制请求包装器使用servlet。那么,有人知道如何在春季实现这一点吗(例如,通过拦截器) 我的目标是向请求添加新的请求参数,以便在控制器中使用它 Thx预先您可以使用过滤器修改httprequestparameter值。注意执行: Web.xml <filter> <description>check request for service token

我想问一下。在SpringREST(MVC)控制器中处理之前,如何修改http请求

据我所知,我可以通过过滤器和定制请求包装器使用servlet。那么,有人知道如何在春季实现这一点吗(例如,通过拦截器)

我的目标是向请求添加新的请求参数,以便在控制器中使用它


Thx预先

您可以使用过滤器修改httprequestparameter值。注意执行:

Web.xml

<filter>
    <description>check request for service token</description>
    <filter-name>CustomFilter</filter-name>
    <filter-class>com.filters.CustomFilter</filter-class>
</filter>

    <filter-mapping>
    <filter-name>CustomFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
创建CustomFilterRapper,在其中重写getParameter方法以修改某些请求参数。在我的例子中,如果请求参数是maverick,我会更改值

public class CustomFilterWrapper extends HttpServletRequestWrapper {

    public CustomFilterWrapper(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getParameter(String name) {


        String[] vals = getParameterMap().get(name);

        if (name.equalsIgnoreCase("maverick")) {
            return "modify value";

        } else if (vals != null && vals.length > 0) {
            return vals[0];
        } else {
            return null;
        }


    }
}

这听起来像是个XY问题。你到底想达到什么目的?在请求中添加一个参数对我来说是一个非常糟糕的主意,而且可能有更好的方法来解决您试图解决的问题。@b3lowster,您尝试了什么?在这里输入一些代码。让我解释一下我想要实现的目标。在控制器中,我有几个端点,其中几个端点需要一个非强制参数(假设参数名为“type”)。所以当参数值为null(但不是通过默认值)时,我想用AOP样式填充这个参数。我知道它是如何工作的。这对我来说根本不是问题。这样,我就无法添加新参数或请求中存在的更改
public class CustomFilterWrapper extends HttpServletRequestWrapper {

    public CustomFilterWrapper(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getParameter(String name) {


        String[] vals = getParameterMap().get(name);

        if (name.equalsIgnoreCase("maverick")) {
            return "modify value";

        } else if (vals != null && vals.length > 0) {
            return vals[0];
        } else {
            return null;
        }


    }
}