如何将@RequestParam Map <String,String>转换为自定义Map <>

时间:2019-08-16 06:52:49

标签: java spring spring-boot spring-mvc converters

我正在尝试将@RequestParam Map<String, String>转换为自己的Map<Enum, Long>,而我想知道如何去做。我的服务需要获取此转换后的Map<Enum, Long>,我真的很想避免一个封装了我的枚举和ID的对象。

这是必需的,因为端点是用api/suff?FOO=1234&BAR=4567调用的,并且此服务仅是其中之一是必需的。

我已经尝试用org.springframework.core.convert.converter.Converter创建自己的Converter<String, Map<Enum, Long>>。但是我无法转换它。

当前我的端点如下:

@GetMapping
public ResponseEntity<Stuff> getByIds(@RequestParam @NotEmpty @Size(max = 2) Map<Enum, Long> map) {
    return new ResponseEntity<>(someService.getStuff(map), HttpStatus.OK);
}

在这种情况下是否有实现自定义转换器的方法,还是我必须遵循其他方法?

1 个答案:

答案 0 :(得分:2)

我会投票选择一种替代方法来实现这一目标-

@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);
}

我不确定这是否会简化您的API-我希望这是一个判断调用。