Spring Controller获取包装器请求类的查询参数

时间:2014-05-01 15:07:39

标签: spring controller

我正在尝试使用spring 4.0构建RESTful Web服务

我有一个控制器:

    @Controller
    @RequestMapping("test")  
    public class Controller{
          @RequestMapping("fetch",method=RequestMethod.GET)
          @ResponseStatus(value=HttpStatus.OK)
          @ResponseBody
          public ResultResponse fetchController(ResultRequest req){
                 if((req.getName).equals("John"))
                     return new ResultResponse(100);
                  else
                     return new ResultResponse(0);
          }
    }

和我的ResultRequest.class

    public class ResultRequest{
         private String name;
            //getter,setter
    }

如果我点击//主机// contextPath / test / fetch?name = John

控制器将返回对象ResultResponse(100)

我的问题是,请求参数中没有@RequestParam或其他注释, spring控制器如何知道将查询参数“name”设置为包装类的属性 ResultRequest?

由于

1 个答案:

答案 0 :(得分:1)

Spring使用名为HandlerMethodArgumentResolver的接口的实现来解析传递给处理程序方法的参数,即。用@RequestMapping注释的方法。

其中一个是ModelAttributeMethodProcessor。它的javadoc陈述

  

解析用@ModelAttribute 注释的方法参数和句柄   返回使用@ModelAttribute注释的方法的值。

     

模型属性是从模型中获得的,或者如果找不到则可能   如果可用,则使用默认构造函数创建。 一旦创建,   属性通过数据绑定填充请求数据和   如果参数用注释,也可以应用验证   @javax.validation.Valid

     

使用annotationNotRequired=true创建此处理程序时,任何   非简单类型参数和返回值被视为模型   存在或不存在@ModelAttribute

的属性

Spring注册了这种类型的两个对象。一个用于处理用@ModelAttribute注释的参数,另一个用于处理没有注释的参数。

进一步阅读: