无法使用来自 java/spring rest 入口点的 ajax 请求检索 json

Cannot retrieve json with ajax request from java/spring rest entry point

我在 class 中嵌入了一个 REST 入口点,带有注释 @RestController

@RequestMapping(value = "/test", method = RequestMethod.GET, produces="application/json")
    public String getReitByDateRangeAdDoGeographic(){
                return "{\"msg\":\"success\"}";
            }

我尝试使用 ajax 请求来请求它:

$.ajax({
    dataType: "jsonp",
    url: URL,
    success: function(data) {
        console.log("SUCCESS");
    },
    error: function (a,b, result) {
        console.log("ERROR");
        console.log(a);
        console.log(b);
        console.log(result);
    }
});

当我在浏览器中查看 http 响应时,它是正确的:

{
    "msg": "success"
}

但错误回调总是随消息调用(HTTP 代码为 200):

14:19:00,855 Error: jQuery1113010493236335514322_1517318340103 was not called
Trace de la pile :
.error@http://localhost:63342/Sankey/external-lib/jquery/jquery-1.11.3.min.js:2:1809
b.converters["script json"]@http://localhost:63342/Sankey/external-lib/jquery/jquery-1.11.3.min.js:5:27779
Pb@http://localhost:63342/Sankey/external-lib/jquery/jquery-1.11.3.min.js:5:18379
x@http://localhost:63342/Sankey/external-lib/jquery/jquery-1.11.3.min.js:5:21793
.send/b.onreadystatechange@http://localhost:63342/Sankey/external-lib/jquery/jquery-1.11.3.min.js:5:27067
 1 generateSankey.js:22:3

你知道为什么吗?是不是解析问题?

找到这个问题多亏了 post : http://www.baeldung.com/spring-jackson-jsonp.

这是由于 "same-origin policy"。为了解决这个问题,我创建了 class

@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {

    public JsonpAdvice() {
        super("callback");
    }

}

然后,ajax 请求如下所示:

$.ajax({
    url: URL,
    dataType: 'jsonp',
    data: requestParam,
    jsonpCallback: 'stringCallback',
    success: function(data) {
        console.log("SUCCESS");
        console.log(data);
    },
    error: function (a,b, result) {
        console.log("ERROR");
        console.log(a);
        console.log(b);
        console.log(result);
    }
});

function stringCallback(json){
    console.log(json);
}