我们的应用程序在控制器方法中接受一个基于JSON的字符串,我们希望使用Spring的Converter接口将其转换为特定类的列表。
该字符串是较大表单提交的一部分,其中包含在不同时间发送的附加参数。
不幸的是,看起来Spring正在使用这个转换器(声明为<String, List<Proprietary>>
),并使用它将所有字符串转换为列表,这不是所需的。
使用Spring MVC提供的转换服务有什么办法解决这个问题吗?我们已经通过在控制器方法中接受字符串并直接执行转换来解决这个问题,但这并不干净。
我可以推荐的一种解决方法是创建自己的HandlerMethodArgumentResolver,并触发此HandlerMethodargumentResolve为特定参数执行-比如创建一个名为JsonArgument的注释,用@JsonArgent-注释这些参数
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
if (methodParameter.getParameterAnnotation(JsonArgument.class)!=null) return true;
现在,在这个HandlerMethodArgumentResolver中,您可以接受特定的请求参数值(Json字符串),并将其转换为所需的类型。
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mav, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
...
jsonString = webRequest.getParameter(parameterName);
Class<?> type = methodParameter.getParameterType();
//Convert jsonString to object of appropriate type..
这样,您的更改将高度集中在您注释的类型上。