在使用Spring MVC传递List参数时直接自动映射出错如下
@ResponseBody @PostMapping("/clarifySumitting") public String clarifySumitting(ArrayList<ClarifyIssue> clarifyIssues) { return "true"; }
JQuery提交代码
function form_submitting(selections){ //此处暂时禁用表格 $table.bootstrapTable('showLoading'); $.post('clarifySumitting',{"clarifyIssues":JSON.stringify(selections)},function(response){ }); //取消禁用 $table.bootstrapTable('hideLoading'); }
无法完成自动映射到Controller
采用自定义解析器配置完成自动映射
一、解析处理代码如下
package com.huaqin.workflow.handler; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import org.springframework.core.MethodParameter; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; import com.alibaba.fastjson.JSON; public class ArrayListArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return ArrayList.class.isAssignableFrom(parameter.getParameterType()); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { /** * 获取 Collection 中的泛型类型进行映射实例化 */ Type[] types = ((ParameterizedType)parameter.getGenericParameterType()).getActualTypeArguments(); if (types.length==0) { throw new RuntimeException("com.huaqin.workflow.handler.CollectionsArgumentResolver:检测不到泛型映射"); } Class<?> clazz = (Class<?>) types[0]; /** * 通过参数名称获取请求数据 */ List<?> list = JSON.parseArray(webRequest.getParameter(parameter.getParameterName()),clazz); return list; } }
二、交由Spring MVC处理器处理
package com.huaqin.workflow.controller; import java.util.List; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; @Configuration public class WebMvcConfg implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { // TODO Auto-generated method stub converters.add(0, new FastJsonHttpMessageConverter()); WebMvcConfigurer.super.configureMessageConverters(converters); } }
完成自动映射