java - 如何转换 @RequestParam 映射到自定义地图<>
问题描述
我正在尝试将 a 转换@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);
}
有没有办法为这种情况实现自定义转换器,还是我必须遵循其他方法?
解决方案
我会投票支持实现这一目标的替代方法 -
@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 - 这是我所期望的判断调用。
推荐阅读
- spring-boot - 尝试部署需要静态 IP 的 PCF Spring Boot 应用程序
- c++ - 作为右值引用传递的对象在尝试应用装饰器模式时会导致错误
- typescript - Nativescript 代码共享项目中忽略 tsconfig 文件?
- vb.net - itextsharp:禁用 pdf 的剪贴板
- javascript - 麦克风输入的 p5.js 傅立叶变换没有输出
- android - Xamarin.Forms 后台/前台服务最佳做法?
- android - 如何使用毕加索库加载远程 svg 文件
- node.js - 如何检查并更新 node.js 中的 AWS dynamoDB 项目?
- php - 如何上传 Laravel 并将应用程序反应到像 GoDaddy 这样的托管服务器
- scala - 如何使用 sparkcontext 读取带引号的 csv