Spring MVC - 参数绑定

时间:2015-08-13 11:00:03

标签: java spring spring-mvc

为什么这段代码会起作用?我没有在参数之前指定任何自定义转换器或注释(如@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) {
        // ...
    }

}

2 个答案:

答案 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/