我正在尝试使用JSONP从另一个使用Spring的域中获取JSON。所以,我写了JsonpControllerAdvice
:
@ControllerAdvice
public class JsonpControllerAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpControllerAdvice() {
super("callback");
}
}
我的控制员:
@RequestMapping("games")
@RestController
public class GameController extends BaseGameController {
private static final Logger LOGGER = Logger.getLogger(GameController.class);
private static final String KAFKA_TOPIC = "virto_games";
private static final String ROOT_URL = ServerConfig.GAMES_HOST + "/games";
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> games(
@RequestParam(defaultValue = "0") int page
) {
String url = ROOT_URL + "?page=" + page;
return request.get(url);
}
}
在浏览器中,它返回下一个JSON:
{
"items":[{
"id":"1b4a3104-925b-46ac-a2da-2187bbf46e0a",
"name":"Minecraft",
"description":"Game",
"user_id":"ee430ea5-0977-4fc2-b1c4-cc33ddd9db56"
}],
"number":0,
"count":1
}
在我的js代码下面是我试图获取JSON的地方:
var virtoHost = "http://localhost:8080/";
function getGames() {
$.ajax({
url: virtoHost + 'games',
dataType: 'JSONP',
jsonpCallback: 'callback',
type: 'GET',
success: function (data) {
alert(JSON.stringify(data));
}
});
}
但它崩溃了例外:
SyntaxError: unexpected token: ':'
[Learn More]
games:1:8
出了什么问题?我检查了它是否是正确的JSON,:
是标准分隔符。
答案 0 :(得分:0)
我收到了错误...我不知道AbstractJsonpControllerAdvice
设置杰克逊为JSON-P提供支持。在我的情况下,我从游戏服务器获得一个准备好的JSON对象,杰克逊没有采取任何行动......
因此,我需要在我的游戏服务器上启用JSON-P支持,并将callback
从我的聚合服务器重新发送到游戏服务器。