十木禾
2017-11-17 06:44
采纳率: 66.7%
浏览 1.1k
已采纳

有关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等基本类型)接受?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • Drizzly_ 2017-11-17 07:00
    已采纳

    400 是肯定的。 @RequestBody 接受一个Body内容作为参数。 你的body是 “{"lookupId":28}”字符串。不是Int 所以报400错
    修改有2种方法。 修改 ajax data: "28",contentType: "application/text" 第二个 修改controller
    public TsLookupTypeHelper getLookupByLookupId( Integer lookupId) {}

    已采纳该答案
    打赏 评论
  • 毕小宝 2017-11-17 06:57

    首先,你在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> 
    

    其次,如果没有的话,建议加上上述配置试试。

    打赏 评论
  • Drizzly_ 2017-11-17 07:01

    忘了说一点。 data: {"lookupId":28} ,

    打赏 评论
  • 如果丶没有 2017-11-17 07:01

    别听楼上的,400是非法参数,比如你前台传递一个"28",后台用Integer来接受,就会报400
    你换成一个String来接受试试

    打赏 评论
  • 狗子猴子驴子 2017-11-17 07:17

    这样写就哦了

    
        @RequestMapping(value = {"getLookup"})
              @ResponseBody
        public TsLookupTypeHelper getLookupByLookupId( Integer lookupId) {}
    
    
    打赏 评论
  • Mycifeng 2017-11-17 07:25

    大哥,看你写的咋这么复杂呢,很简单的一个操作
    前端不需要转成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是随便起的参数名,但是通过上述的绑定 也是可以得到参数的
    
    打赏 评论
  • 梦里_人 2017-11-18 06:12

    请问楼主为什么前台一定要{"lookupId":28}这种方式来传递???

    打赏 评论

相关推荐 更多相似问题