小编典典

如何不使用setter绑定请求参数?

spring-boot

我有一个带有GET处理程序的简单控制器,该处理程序接受一个对象来绑定请求参数:

@RestController
@RequestMapping("/test")
public class SampleController {

    @GetMapping
    public SomeResponse find(RequestParams params) {
       // some code
    }

}

RequestParams是一个简单的POJO类:

public class RequestParams  {

    private String param1;
    private String param2;

    // constructor, getter, and setters

}

一切正常,但我想摆脱设置者,使该对象不可变为公共使用。在Spring 5.0.2
之前的处理程序方法文档@RequestMapping,我们了解到可能的有效方法参数是:

命令或表单对象将请求参数绑定到Bean属性(通过设置器) 或直接 绑定 到字段

是否可以以某种方式覆盖默认的Spring Boot配置,以便使用反射而不是使用setter将请求参数绑定到类属性?

更新2018

在Spring的文档的更高版本中,带引号的语句已被重新措词,并且不再包含有关将请求参数直接绑定到字段的信息。


阅读 288

收藏
2020-05-30

共1个答案

小编典典

除了@jihor建议的JSON注释之外,您还可以尝试使用自定义Web数据绑定器,将以下代码添加到控制器或Controller
Advice
类中,以跨多个控制器扩展功能。

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.initDirectFieldAccess();
}
2020-05-30