使用自定义转换器将查询参数映射到模型

时间:2018-12-03 13:30:20

标签: spring-mvc

我对 REST API 有以下要求:

GET {hostname}:{port}/entity?code=123&recordId=422&prop1=123&prop2=213&propN=512

我想将查询参数转换为模型:

public class EntityFilter { 
  private String code;
  private String recordId;
  private MultiValueMap<String, String> props; //all props goes here eg prop1=123, prop2=213

  //getters and setters are ommited
}

并将此模型作为控制器的输入参数:

@GetMapping(value = "/entities", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity getEntities(EntityFilter filter) {
   //code
}

使用这样的设置,我将在“ 代码”和“ recordId ”中填充适当的值,但“ 道具”映射将为空。

如何告诉Spring根据一些自定义转换器或其他东西填充模型对象?

我尝试使用:

@InitBinder
public void initBinderAll(WebDataBinder binder) {
   binder.registerCustomEditor(EntityFilter.class, new FilterProperyEditor());
}

但是 FilterPropertyEditor 的实际方法(如 setAsText(String text))根本没有执行。

1 个答案:

答案 0 :(得分:1)

可能您需要将查询更改为

GET {hostname}:{port}/entity?code=123&recordId=422&props[0]=123&props[1]=213&props[N]=512