springmvc ajax传递字符串过长报错400bad request

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springmvc ajax传递字符串过长报错400bad request相关的知识,希望对你有一定的参考价值。

参考技术A 可能是地址里边有特殊字符,如果是高版本的tomcat的话,|这些字符会被拦截掉,请求会报400错误,如果是这个问题请求内容转义下可以解决 参考技术B 一般400的报错都是参数错误。检查下参数是否有问题。追问

参数没问题,传递新闻字符串,短一点保存到数据库可以,长一点的就报错

追答

你都能得到答案了。看看是不是参数长度问题。

追问

对,就是长度问题,不知道怎么解决,传递参数格式是json的id:id,content:xxx这里的xxx就是一篇文章,参数长度不知道在哪控制

追答

不知道怎么解决。
参考
http://blog.csdn.net/jimmy2248/article/details/8226039
试试。只能帮你到这。
400的错误就是这样。

追问

谢谢啦,我这里后台没报错,发送请求的时候报错的。。

追答

可以试试 转换为post。get的最大1024字节。

追问

$http(
method: "post",
url: httpUrl + "/xx/xx.do",
headers:
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
,
params:params
就是这样的

追答

这是angularjs吧。
header:Content-Type: application/json 试试

追问

对 ,用的是angular,contentType我试了好几个都不行,我现在在尝试序列化有没有用,网上也有好多ajax传递json字符串长度问题,但是就是没有个准确答案

追答

哦。好吧。祝你成功,只能帮到这了。

追问

能给个联系方式吗,我想跟你多交流交流

追答

直接私信就OK。主要是现在不再国内。

追问

好,有问题再请教你

追答

互相学习。

互相学习。

互相学习。

参考技术C type:post,
get传送的信息量有限。
参考技术D 请把GET改成POST

ajax传递参数给springmvc总结[转]

通过ajax传递参数给springmvc,经常会因为 参数类型太复杂,或者根本不知道springmvc都支持哪些类型转换,导致后台接收出现各种问题。如果书写格式没有问题仍然接受参数报错,大部分是因为springmvc默认无法支持该种格式的json转换导致的

现在一句话解决,就是用@RequestBody注解接收

下面看一些传参的例子,基本涵盖了大部分的参数传递类型

案例1:简单数组 idList[]

ajax

   $("#test1").on("click",function(){
                var idList = new Array();
                idList.push("1");
                idList.push("2");
                idList.push("3");
                $.post("/mvc/client1/test1",{idList:idList})
            });

 

java

  /**
     * 简单类型list
     * explain:包含string int date 等属性
     */
    @RequestMapping("/test1")
    @ResponseBody
    public void test1(@RequestParam("idList[]") List<Integer> idList){
        for(Integer i: idList){
            System.out.println(i);
        }
    }

 



案例1中要注意,当你ajax传递一个很简单的数组,本以为后台能够接受到,却总是报错,很可能的原因是:http请求传递数组的时候,为了区别是一个数组,会在数组名称后面加上中括号“[]”,所以后台接受的时候用@RequestParam告诉方法,你要的idList实际上是idList[]就可以了

案例:2:简单对象User (包含id,username)

ajax

    $("#test2").on("click",function(){
                var id          =1;
                var username    ="fangxin";
                $.post("/mvc/client1/test2",{id:id,username:username,birthday:new Date()})
            });

 

java

   @RequestMapping("/test2")
    @ResponseBody
    public void test2(User user){
        System.out.println(user.getId());
        System.out.println(user.getUsername());
        System.out.println(user.getBirthday());
    }

 

这就是最常见的传递参数,如果一个对象的属性都是简单类型,那基本没什么问题

案例3:复杂对象User (包含id,username,String[],List<Person>)

ajax

        $("#test3").on("click",function(){
                var user = {
                    id:1,
                    username:"fangxin",
                    birthday:new Date(),
                    luckyNums:[1,2,3],
                    friends:[
                        {name:"zhangsan"},
                        {name:"lisi"}
                    ]
                };
                $.ajax({
                    type: "POST",
                    url:"/mvc/client1/test3",
                    data: JSON.stringify(user),
                    contentType:"application/json"
                })
            });

 

java

  /**
     * 复杂对象
     * explain:包含简单list属性、对象list属性
     */
    @RequestMapping("/test3")
    @ResponseBody
    public void test3(@RequestBody User user){
        System.out.println(user.getId());
        System.out.println(user.getUsername());
        System.out.println(user.getBirthday());
        for(Integer i:user.getLuckyNums()){
            System.out.println(i);
        }
        for(Person p:user.getFriends()){
            System.out.println(p.getName());
        }
    }

 

案例3中的User的属性相当复杂,有简单数组,还有包含对象的复杂List,这样的user如果用案例2的方式接受,肯定就挂了。此时,最好是前台stringify转换成json字符串,后台用@RequestBody接受自动转换成想要的数据格式。

案例4:复杂List<User>

ajax

  $("#test5").on("click",function(){
                var users = [];
                for(var i=0;i<10;i++){
                    var user = {
                        id:1,
                        username:"fangxin",
                        birthday:new Date(),
                        luckyNums:[1,2,3],
                        friends:[
                            {name:"zhangsan"},
                            {name:"lisi"}
                        ]
                    };
                    users.push(user);
                }
                $.ajax({
                    type: "POST",
                    url:"/mvc/client1/test5/",
                    data: JSON.stringify(users),
                    contentType:"application/json"
                })
            });

 

java

  /**
     * 复杂List
     */
    @RequestMapping("/test5")
    @ResponseBody
    public void test5(@RequestBody List<User> users){
        for(User user:users){
            System.out.println(user.getUsername());
        }
    }

 

用案例3的方式,依然可以接收到,屡试不爽。

案例5 List<Map<String,Obj>>更复杂对象

同理



以上是关于springmvc ajax传递字符串过长报错400bad request的主要内容,如果未能解决你的问题,请参考以下文章

springMVC通过ajax传递参数list对象或传递数组对象到后台

springmvc接收ajax传递的数组

将 Map<String,String> 传递给 springMVC 控制器

ajax post提交到SpringMVC的Controller并将处理结果传递到前台输出总结

ajax传递参数给springmvc

ajax接收springMVC传递的json数据