有关SpringMVC传递参数的问题

前台通过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}这种方式来传递???