我正在尝试将@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);
}
在这种情况下是否有实现自定义转换器的方法,还是我必须遵循其他方法?
答案 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-我希望这是一个判断调用。