自定义DTO内的映射请求参数和字段?

gst*_*low 11 spring spring-mvc model-binding spring-mvc-initbinders

我有以下课程:

public class MyDTO { 

       private String kiosk;
       ...
}
Run Code Online (Sandbox Code Playgroud)

和以下网址:

http://localhost:1234/mvc/controllerUrl?kiosk=false
Run Code Online (Sandbox Code Playgroud)

并遵循控制器方法:

@RequestMapping(method = RequestMethod.GET, produces = APPLICATION_JSON)
@ResponseBody
public ResponseEntity<List<?>> getRequestSupportKludge(final MyDTO myDTO, BindingResult bindingResult) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在它工作得很好,布尔字段正确解析.

现在url参数已经改变如下:

http://localhost:1234/mvc/controllerUrl?new_kiosk=false
Run Code Online (Sandbox Code Playgroud)

我不想在DTO中更改参数名称.有没有办法说spring知道new_kiosk请求参数值应该放在kiosk字段中?

Mas*_*ave 14

除了设置一个额外的setter,你可以通过制作一个自定义参数解析器来处理这个案例.有几种方法你可以解决它,但已经有一个讨论得很好的帖子.如果我是你,我会专注于jkee的回答.一步一步地跟着它,而你应该做的只是用类似的东西来注释你的DTO,

public class MyDTO { 

       @ParamName("new_kiosk")
       private String kiosk;
       ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,即使您无法更改MyDTO类,仍可以按照自定义解析程序路径进行操作.在这篇文章中,我已经回答了如何编写参数类型注释.结合这两篇文章,您可以轻松地提出一个注释,例如@ParamMapper,它将定义从请求到属性的映射.想想类似的东西

 getRequestSupportKludge(@ParamMapper("new_kiosk;kiosk") MyDTO myDTO, BindingResult bindingResult)
Run Code Online (Sandbox Code Playgroud)