And an additional ControllerAdvice
like this (see reference documentation ):
@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice () {
super ( "callback" );
}
}
That's it.
1,新建JsonpAdvice控制器增强
继承org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice类
1
2
3
4
5
6
7
8
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;
@ControllerAdvice (basePackages =
"com.xxx.web.controller.jsonp" )
public
class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice () {
super (
"callback" ,
"jsonp" );
}
}
2,需要jsonp的controller类使用@RestController注解
1
2
3
4
5
6
7
8
9
10
@RestController
@RequestMapping (
"/test" )
public
class RankingListController {
@ResponseBody
@RequestMapping (value =
"/getPopularity" , method = RequestMethod.GET, produces =
"application/json;charset=UTF-8" )
public JSONObject getPopularity () {
return JSON.parseObject((String) redisClient.getObject(popularityRankingListKey));
}
}
3,调用
方式一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<html >
<head >
<meta charset ="UTF-8" />
<script src ="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" >
</script >
</head >
<body >
<div >
请用Chrome浏览器打开,返回结果在F12 Console日志显示。
</div >
<script language ="JavaScript" >
$(document).ready(function() {
$.ajax({
url:'http://localhost:8080/test/getPopularity',
dataType:'jsonp',
success:function(data){
console.log("返回Json:")
console.log(data)
}
});
});
</script >
</body >
</html >
方式二
1
http://localhost:8080/test/getPopularity?callback=jsonp