我正在尝试使用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?
由于
答案 0 :(得分:1)
Spring使用名为HandlerMethodArgumentResolver
的接口的实现来解析传递给处理程序方法的参数,即。用@RequestMapping
注释的方法。
其中一个是ModelAttributeMethodProcessor
。它的javadoc陈述
解析用
@ModelAttribute
注释的方法参数和句柄 返回使用@ModelAttribute
注释的方法的值。模型属性是从模型中获得的,或者如果找不到则可能 如果可用,则使用默认构造函数创建。 一旦创建, 属性通过数据绑定填充请求数据和 如果参数用注释,也可以应用验证
@javax.validation.Valid
。使用
的属性annotationNotRequired=true
创建此处理程序时,任何 非简单类型参数和返回值被视为模型 存在或不存在@ModelAttribute
。
Spring注册了这种类型的两个对象。一个用于处理用@ModelAttribute
注释的参数,另一个用于处理没有注释的参数。
进一步阅读: