我有一个通用的控制器,有很多方法,支持各种查询参数组合和媒体类型。在派生这个控制器的子类时,我想添加一些额外的查询字符串参数绑定。但是,由于不可能覆盖@RequestMapping注释,因此最好的做法似乎是使用一个覆盖方法,该方法从每个方法获取HttpServletRequest并输出定制的映射对象:
public class GenericController<T,ID>{
@RequestMapping(value = "/search", method = RequestMethod.GET,
produces = { MediaType.APPLICATION_JSON_VALUE })
public HttpEntity findById(HttpServletRequest request){
Map<String,Object> params = queryStringToParams(request.getParameterMap());
List<T> results = repository.find(params);
return new ResponseEntity<>(results, HttpStatus.OK);
}
protected Map<String,Object> queryStringToParams(Map<String,String[]> qsParams){
// magic happens here
}
} 我的问题是:在解析控制器方法参数之后,是否可以利用Spring用来转换@RequestParam参数的现有参数解析器的功能?将查询字符串格式的字符串参数转换为Java对象的功能显然已经在这里实现了,如果必须编写我自己的对象映射器,那就太愚蠢了。
发布于 2015-08-07 22:40:39
原来我要找的是Spring的ConversionService。我可以通过注入容器现有的ConversionService...
@Autowired ConversionService conversionService;
...
Float number = conversionService.convert((String) qsParams.get("number")[0], Float.class);
.....。这具有包括可能已经创建的任何定制转换器的好处。或者,我可以使用默认的ConversionService实现DefaultConversionService
ConversionService conversionService = new DefaultConversionService();https://stackoverflow.com/questions/31814463
复制相似问题