1

我们的应用程序在控制器方法中接受基于 JSON 的字符串,我们希望使用 Spring 的 Converter 接口将其转换为特定类的列表。

该字符串是较大表单提交的一部分,其中包含在不同时间发送的附加参数。

不幸的是,看起来 Spring 正在选择这个转换器(声明为<String, List<Proprietary>>)并使用它将所有字符串转换为列表,这不是我们想要的。

有没有办法使用 Spring MVC 提供的转换服务来解决这个问题?我们通过只接受控制器方法中的字符串并直接执行转换来解决这个问题,但这并不那么干净。

4

1 回答 1

2

我可以推荐的一种解决方法是创建您自己的HandlerMethodArgumentResolver并触发此 HandlerMethodArgumentResolver 以针对特定参数执行 - 例如通过创建名为 JsonArgument 的注释,使用 @JsonArgument 注释这些参数 -

    @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..

这样,您的更改将高度集中在您已注释的类型上。

于 2012-07-10T16:34:58.067 回答