SpringMVC无法接收List类型参数的常见原因
SpringMVC无法接收List类型参数的常见原因
1.前端没有使用JSON字符串格式来传送参数
没有使用JSON字符串格式传递参数
数组类型:[1,2,3,4,5]
JSON字符串类型:"["1","2","3","4"]"
对象类型:{"username":"tony"}
报错信息
13-Jun-2022 19:51:56.115 警告 [http-nio-8080-exec-206] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMessageNotReadable Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unexpected character (',' (code 44)): Expected space separating root-level values
at [Source: java.io.PushbackInputStream@2fe41ad; line: 1, column: 3]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character (',' (code 44)): Expected space separating root-level values
at [Source: java.io.PushbackInputStream@2fe41ad; line: 1, column: 3]
解决方案:
使用JSON.stringify(ids)方法来把对象或者数组转换为json字符串格式来作为参数传递给后端
2.没有设置Content-Type
HTTP Status 415 – 不支持的媒体类型,源服务器拒绝服务请求,因为有效负载的格式在目标资源上此方法不支持。
使用@RequestBody时只会解析Content-Type: application/json的请求,在请求头中加上即可。
3.没有使用@RequestBody来解析JSON字符串
报错信息:
org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:99)
org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:141)
org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:80)
org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:101)
org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:158)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
解决方法:接收参数的时候使用@ReqeustBody,并且前端使用JSON.stringify()方法来把参数转换成JSON字符串格式
分类:
常见问题