【发布时间】:2015-07-28 15:34:37
【问题描述】:
我正在尝试使用 @InitBind 批注仅映射请求正文中对象上的某些字段。
我有一个这样定义的弹簧控制器:
@RequestMapping(value = "addAddress", method = RequestMethod.POST)
public Object addAddressToPerson(
HttpServletRequest request,
HttpServletResponse res,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "surname", required = false) String surname,
@RequestBody personDTO personJson,BindingResult result) {
客户端请求将是一个代表 personDTO 的 json,但出于安全原因,我不希望除地址之外的该字段映射到对象中。
输入将类似于:
{ "address":"123 Street","........}
personDTO 包含许多字段,由于 spring 将所有字段直接映射到 DTO 中,这可能是个问题。
我已经看到一个解决方案是使用 Binder 来声明允许或不允许的字段,但是如果我检查控制器内的 personDTO,则会填充其他字段(例如,如果传递“id”:“1234”) .
有什么提示吗?
binder 代码如下:
@InitBinder("orderJson")
protected void orderJsonBinder(WebDataBinder binder){
binder.setAllowedFields(new String[]{"address"});
}
我错过了什么吗?
最好的问候,
卢卡。
【问题讨论】:
标签: spring