为什么这段代码会起作用?我没有在参数之前指定任何自定义转换器或注释(如@RequestBody
或@ModelAttribute
)?通过此GET调用正确填写请求:
http://localhost:8080/WS/foo?token=C124EBD7-D9A5-4E21-9C0F-3402A1EE5E9B&lastSync=2001-01-01T00:00:00&pageNo=1
代码:
@RestController
@RequestMapping(value = "/foo")
public class FooController {
@RequestMapping(method = RequestMethod.GET)
public Result<Foo> excursions(Request request) {
// ...
}
}
请求只是带有getter和setter的POJO。我用它来缩短参数代码,因为很多方法使用相同的参数...
public class Request {
private String token;
@DateTimeFormat(pattern = IsoDateTime.DATETIME)
private Date lastSync;
private Integer pageNo;
// getters and setters
}
这是我在介绍请求之前的原始方法。
@RestController
@RequestMapping(value = "/foo")
public class FooController {
@RequestMapping(method = RequestMethod.GET)
public Result<Foo> excursions(@RequestParam String token, @RequestParam @DateTimeFormat(pattern = IsoDateTime.DATETIME) Date lastSync, @RequestParam Integer pageNo) {
// ...
}
}
答案 0 :(得分:1)
默认情况下,请求参数将映射到POJO,就像您的情况一样。此外,如果您使用@ModelAttribute,则会创建Model
中的属性。然后可以在视图中使用该属性,例如JSP,用于访问对象。
@RequestBody
注释表明请求的主体不是一组表单参数,如
token=C124EBD7-D9A5-4E21-9C0F-3402A1EE5E9B&lastSync=2001-01-01T00:00:00&pageNo=1
但是采用其他格式,例如JSON。
答案 1 :(得分:0)
这是Spring MVC提供的一项功能:
可自定义的绑定和验证。键入不匹配作为应用程序级验证错误,保留违规值,本地化日期和数字绑定等,而不是通过手动解析和转换为业务对象的仅字符串表单对象。
您可以在文档中看到它:http://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/htmlsingle/