我有一个带有GET处理程序的简单控制器,该处理程序接受一个对象来绑定请求参数:
@RestController @RequestMapping("/test") public class SampleController { @GetMapping public SomeResponse find(RequestParams params) { // some code } }
这RequestParams是一个简单的POJO类:
RequestParams
public class RequestParams { private String param1; private String param2; // constructor, getter, and setters }
一切正常,但我想摆脱设置者,使该对象不可变为公共使用。在Spring 5.0.2 之前的处理程序方法文档中@RequestMapping,我们了解到可能的有效方法参数是:
@RequestMapping
命令或表单对象将请求参数绑定到Bean属性(通过设置器) 或直接 绑定 到字段
是否可以以某种方式覆盖默认的Spring Boot配置,以便使用反射而不是使用setter将请求参数绑定到类属性?
更新2018
在Spring的文档的更高版本中,带引号的语句已被重新措词,并且不再包含有关将请求参数直接绑定到字段的信息。
除了@jihor建议的JSON注释之外,您还可以尝试使用自定义Web数据绑定器,将以下代码添加到控制器或Controller Advice类中,以跨多个控制器扩展功能。
@InitBinder public void initBinder(WebDataBinder binder) { binder.initDirectFieldAccess(); }