Spring控制器不接受应用程序/ json
当我从Chrome Rest Client传递application / json参数时,我收到了400个错误的请求错误。 当我为@RequestParam添加required = false时,请求被Controller接受但值为Null。
@RequestMapping(value = "/add",
method = RequestMethod.POST,
consumes="application/json",
produces="application/json")
public @ResponseBody String add(
@RequestParam(value="surveyName") String surveyName,
@RequestParam(value="surveyDesc") String surveyDesc,
ModelMap model) throws Exception
{
System.out.println("request parameters in /add/syrvey surveyName= "+surveyName);
}
我的JSON请求如下,Content-Type是“aplication / json”
{"surveyName"="sd", "surveyDesc":"sd"}
我尝试使用headers =“Accept = application / json”,但没有多大帮助。
我的调度员servlet是
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=">
<context:annotation-config />
<context:component-scan base-package="com.survey.controller" />
<context:component-scan base-package="com.survey.service" />
<context:component-scan base-package="com.survey.dao" />
<context:component-scan base-package="com.survey.entity" />
<context:component-scan base-package="com.survey.constants" />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter" />
</list>
</property>
</bean>
</beans>
我的pom.xml是
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
任何帮助不胜感激
在你的情况下,你可以使用Map
:
public @ResponseBody String add(@RequestBody Map<String, String> input) throws Exception
然后遍历它以找到你的参数,或者你可以使用Pojo
public class Pojo {
private String surveyName;
private String surveyDesc;
...
}
public @ResponseBody String add(@RequestBody Pojo pojo) throws Exception
希望这可以是有用的!
@RequestParam
不能用于加载复杂的json对象的部分。 它被设计用于选择请求参数,但不用于在(单个)请求参数中选择某些内容。
你需要使用@RequestBody
和一个容器对象
public class MyContainer {
private String surveyName;
private String surveyDesc;
...
}
public @ResponseBody String add(@RequestBody Container container){...}
或者您可以实施Biju Kunjummen在他对类似问题的回答中所描述的解决方案。 这个想法是实现你自己的HandlerMethodArgumentResolver
,它由一个带有JsonPath表达式参数的参数注释触发
public @ResponseBody String add(
@JsonArg("/surveyName") String surveyName,
@JsonArg("/surveyDesc") String surveyDesc){...}
看看使用Ajax将@RequestBody中的多个变量传递给Spring MVC控制器以获取实现细节。
如果你喜欢这个答案,那么请同时注意Biju Kunjummen的回答,因为这是他的想法。 我只是看了一下,因为这是一个有趣的问题。
还要在lib中添加这两个库或为此添加maven。
杰克逊JAXRS-1.6.1.jar
杰克逊映射器-ASL-1.9.9.jar
链接地址: http://www.djcxy.com/p/41333.html