前台通过ajax
提交json格式数据,如下
$.ajax(
{
url: "http://localhost:8090/lookup/getLookup",
type: "POST",
dataType: "json",
data: JSON.stringify({"lookupId":28}),
contentType: "application/json",
success: function (data, textStatus, jqXHR) {
alert(data.code)
},
error: function (data, textStatus, jqXHR) {
alert("ERROE");
}
}
);
这样请求的参数就是{"lookupId":28}
那么后台我是写的这样接收
@ResponseBody
@RequestMapping(value = {"getLookup"})
public TsLookupTypeHelper getLookupByLookupId(@RequestBody Integer lookupId) {}
请求的时候会报错 400,请问要怎样在前台发送json数据,后台通过非javabean的参数(指的是 int string等基本类型)接受?
400 是肯定的。 @RequestBody 接受一个Body内容作为参数。 你的body是 “{"lookupId":28}”字符串。不是Int 所以报400错
修改有2种方法。 修改 ajax data: "28",contentType: "application/text" 第二个 修改controller
public TsLookupTypeHelper getLookupByLookupId( Integer lookupId) {}
首先,你在ajax中使用的类型dataType为json,那么你就必须保证你的springMVC.xml配置文件中配置了接收json数据的contentNegotiationManager。检查下你的配置文件中有没有这个配置:
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<!-- 开启后缀匹配模式,.json请求会默认利用Jackson进行数据转换 -->
<property name="favorPathExtension" value="true" />
<property name="favorParameter" value="true" />
<property name="mediaTypes" >
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
其次,如果没有的话,建议加上上述配置试试。
忘了说一点。 data: {"lookupId":28} ,
别听楼上的,400是非法参数,比如你前台传递一个"28",后台用Integer来接受,就会报400
你换成一个String来接受试试
这样写就哦了
@RequestMapping(value = {"getLookup"})
@ResponseBody
public TsLookupTypeHelper getLookupByLookupId( Integer lookupId) {}
大哥,看你写的咋这么复杂呢,很简单的一个操作
前端不需要转成json直接写:
$.ajax(
{
url: "http://localhost:8090/lookup/getLookup",
type: "POST",
dataType: "json",
data: {"lookupId":28},
success: function (data) {
alert(data.code)
},
error: function () {
alert("ERROE");
}
}
);
后台:
@RequestMapping(value = {"/lookup/getLookup"})
public TsLookupTypeHelper getLookupByLookupId( Integer lookupId) {}
注意:你前台传的类型是int类型,所以后我这块也用int类型接,如果是字符串 就用String去接就好了 只要保证参数名称和前端的一致就好,
如果不一致则需要@RequestParam("lookupId")来去绑定,具体用法:
@RequestMapping(value = {"/lookup/getLookup"})
public TsLookupTypeHelper getLookupByLookupId( @RequestParam("lookupId")Integer aaa) {}
注意:aaa是随便起的参数名,但是通过上述的绑定 也是可以得到参数的
请问楼主为什么前台一定要{"lookupId":28}这种方式来传递???