首页 > 解决方案 > 为什么responsebody注解返回String会导致ajax错误?

问题描述

为什么springmvc返回某种String会导致ajax错误!

当控制器返回像 123 这样的整数时,它工作正常;

当控制器返回像“123”这样的整数字符串时,它工作正常;

当控制器返回像“abc”这样的字符串时,ajax 会出错!

这个问题就像https://www.mkyong.com/jquery/jquery-ajax-request-return-200-ok-but-error-event-is-fired/

这只是对 springmvc 控制器的简单 ajax 请求

ajax 请求

           $.ajax({
                type: "POST",
                url: "/test",
                data: JSON.stringify(json),
                dataType: "json",
                async : false,
                contentType: "application/json",
                success: function(msg){
                    alert(msg);
                    debugger;
                    result = msg;
                },
                error: function(msg){
                    debugger;
                    alert(msg);
                }
            })

控制器文件:

         @RequestMapping("test")
         public String test(){
          //return "123"; ajax works fine
           return 123; ajax works fine
           return "abc";  //ajax parsererror
         }

我希望所有类型的字符串都可以,包括像 "abc" 这样的字符串!
谁能帮我 !
谢谢!

标签: javaajaxspring-mvc

解决方案


因为 Json ,123 是一个合格的 JSON,因为它被认为是数字。但是 abc 不是合格的 JSON ,“abc”是合格的 JSON 。SpringMvc 以 abc 而非 "abc" 返回前端 web,因此 ajax 无法解析。

我可以考虑两种解决方案。第一个答案是:使用 Util 类用“abc”装饰 abc;每次返回 String 时,都需要麻烦地这样做。

public class StringUtils {
    public static String modifyReturnJson(String str){
        return  "\""+str+"\"";
    }
}
@RequestMapping("/test")
    public String test() throws IOException {
        return StringUtils.modifyReturnJson("123");
        //return "123"; ajax works fine
//        return 123; //ajax works fine
//        return "abc";  //ajax parsererror
    }

第二种方式:删除数据类型:“json”


推荐阅读