到自定义地图<>,java,spring,spring-boot,spring-mvc,converters"/>

首页 > 解决方案 > 如何转换 @RequestParam 映射到自定义地图<>

问题描述

我正在尝试将 a 转换@RequestParam Map<String, String>为我自己的Map<Enum, Long>,我想知道该怎么做。我的服务需要进行转换Map<Enum, Long>,我真的很想避免使用封装我的枚举和 id 的对象。

这是必要的,因为端点被调用api/suff?FOO=1234&BAR=4567并且只有其中一个是该服务的强制性。

我已经尝试org.springframework.core.convert.converter.ConverterConverter<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);
}

有没有办法为这种情况实现自定义转换器,还是我必须遵循其他方法?

标签: javaspringspring-bootspring-mvcconverters

解决方案


我会投票支持实现这一目标的替代方法 -

@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 - 这是我所期望的判断调用。


推荐阅读