首页 > 解决方案 > 使用自定义转换器将查询参数映射到模型

问题描述

我对我的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
}

使用这样的设置,我将使用正确的值填充“ code ”和“ recordId ”,但“ props ”映射将为空。

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

我曾尝试使用:

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

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

标签: spring-mvc

解决方案


可能您需要将查询更改为

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

推荐阅读