Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SpringWebMVC中注册转换器以在字符串和特定类型列表之间进行转换?_Spring_Spring Mvc_Converter - Fatal编程技术网

如何在SpringWebMVC中注册转换器以在字符串和特定类型列表之间进行转换?

如何在SpringWebMVC中注册转换器以在字符串和特定类型列表之间进行转换?,spring,spring-mvc,converter,Spring,Spring Mvc,Converter,我们的应用程序在控制器方法中接受基于JSON的字符串,我们希望使用Spring的转换器接口将其转换为特定类的列表 字符串是较大表单提交的一部分,包含在不同时间发送的附加参数 不幸的是,Spring似乎正在使用这个转换器(声明为),并使用它将所有字符串转换为列表,这不是所希望的 使用SpringMVC提供的转换服务有没有办法解决这个问题?我们已经通过在控制器方法中接受字符串并直接执行转换来解决这个问题,但这并不是那么干净。我可以推荐的一个解决方法是创建自己的并触发这个HandlerMethodAr

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

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

不幸的是,Spring似乎正在使用这个转换器(声明为
),并使用它将所有字符串转换为列表,这不是所希望的


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

我可以推荐的一个解决方法是创建自己的并触发这个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..
@覆盖
公共对象resolveArgument(MethodParameter参数、ModelAndViewContainer mav、NativeWebRequest webRequest、WebDataBinderFactory binderFactory)引发异常{
...
jsonString=webRequest.getParameter(parameterName);
类类型=methodParameter.getParameterType();
//将jsonString转换为适当类型的对象。。

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

Json字符串是作为请求参数输入的,还是作为整个请求正文(如果是整个请求正文),带MessageConverters的@RequestBody是否更适合您的情况?编辑问题正文以解决您的问题。它不是整个请求体。