为什么响应体注释返回String会导致Ajax错误?

时间:2019-04-18 02:53:15

标签: java ajax spring-mvc

为什么springmvc返回某种字符串会导致ajax错误!

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

当控制器返回整数字符串(如“ 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
         }

我希望所有类型的String都可以,包括“ abc”之类的String即可!
谁能帮我!
谢谢!

1 个答案:

答案 0 :(得分:0)

因为Json,123是合格的JSON,因为它被视为number。 但是abc不是合格的JSON,“ abc”是合格的JSON。 SpringMvc使用abc而不是“ abc”返回到前端网站,因此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”