Java 如何转换@RequestParam映射<;字符串,字符串>;到自定义地图<&燃气轮机;

Java 如何转换@RequestParam映射<;字符串,字符串>;到自定义地图<&燃气轮机;,java,spring,spring-boot,spring-mvc,converters,Java,Spring,Spring Boot,Spring Mvc,Converters,我正在尝试将一个@RequestParam映射转换为我自己的映射,我想知道如何做。我的服务需要将此映射转换为Map,我真的希望避免使用封装我的枚举和id的对象 这是必需的,因为端点是通过api/suff?FOO=1234&BAR=4567调用的,并且只有一个端点是此服务必需的 我已经尝试用converter创建自己的org.springframework.core.convert.converter.converter。但我没能把它转换过来 当前,我的端点如下所示: @GetMapping pu

我正在尝试将一个
@RequestParam映射
转换为我自己的
映射
,我想知道如何做。我的服务需要将此映射转换为
Map
,我真的希望避免使用封装我的枚举和id的对象

这是必需的,因为端点是通过
api/suff?FOO=1234&BAR=4567调用的,并且只有一个端点是此服务必需的

我已经尝试用
converter
创建自己的
org.springframework.core.convert.converter.converter
。但我没能把它转换过来

当前,我的端点如下所示:

@GetMapping
public ResponseEntity<Stuff> getByIds(@RequestParam @NotEmpty @Size(max = 2) Map<Enum, Long> map) {
    return new ResponseEntity<>(someService.getStuff(map), HttpStatus.OK);
}
@GetMapping
公共响应性getByIds(@RequestParam@NotEmpty@Size(max=2)映射){
返回新的ResponseEntity(someService.getStuff(map)、HttpStatus.OK);
}

在这种情况下,有没有办法实现自定义转换器,或者我必须采用其他方法?

我会投票选择另一种方法来实现这一点-

@GetMapping
public ResponseEntity<Stuff> getByIds(@RequestParam(value="FOO", required = false) 
    String fooValue, @RequestParam(value="BAR", required = false) String barValue) {

    //Assuming you already have an ExceptionAdvice/handler for issues with the values passed
    Map<Enum, Long> map = new HashMap<Enum, Long>();
    if(null != fooValue){
        map.put("FOO", Enum.parse(fooValue));
    }
    if(null != barValue){
        map.put("BAR", Long.valueOf(barValue));
    }
    return new ResponseEntity<>(someService.getStuff(map), HttpStatus.OK);
}
@GetMapping
公共响应性getByIds(@RequestParam(value=“FOO”,required=false)
字符串fooValue,@RequestParam(value=“BAR”,required=false)字符串barValue){
//假设您已经有一个ExceptionAdvice/处理程序来处理传递的值的问题
Map Map=newhashmap();
if(null!=fooValue){
map.put(“FOO”,Enum.parse(fooValue));
}
如果(null!=barValue){
map.put(“BAR”,Long.valueOf(barValue));
}
返回新的ResponseEntity(someService.getStuff(map)、HttpStatus.OK);
}

我不确定这是否过于简化了您的API—我希望这是一个判断调用。

感谢您的回答和非常准确的解决方案。与此同时,我想出了另一个。我创建了一个
StaffMap
,它扩展了
HashMap
。在构造函数中,我们传递
Map
并将其映射为
Map.forEach((键,值)->put(Enum.valueOf(键),Long.parseLong(值));
这是一个设计决策过程,因为如果映射不成功,并且只有一个字段是必需的,我们希望抛出异常。