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字符串格式

posted @ 2022-06-13 20:09  zeliCouer  阅读(922)  评论(0编辑  收藏  举报