javaEE SpringMVC,Jsonp,跨域请求,MappingJacksonValue
程序员文章站
2022-07-08 14:40:07
...
TokenController.java(后端,SpringMVC的Controller,拼装JS并返回):
package cn.xxx.sso.controller;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJacksonValue;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.e3mall.common.utils.E3Result;
import cn.e3mall.common.utils.JsonUtils;
import cn.e3mall.sso.service.TokenService;
//根据token查询用户信息Controller
@Controller
public class TokenController {
@Autowired
private TokenService tokenService;
//第一种方式:手动拼装成JS语句。
@RequestMapping(value="/user/token/{token}", produces=MediaType.APPLICATION_JSON_UTF8_VALUE/*"application/json;charset=utf-8"*/)
@ResponseBody
public String getUserByToken(@PathVariable String token, String callback) { //如果用JQuery发送Jsonp请求,callback参数名是固定的。
E3Result result = tokenService.getUserByToken(token); //E3Result是自定义的返回对象类型。
//响应结果之前,判断是否为jsonp请求
if (StringUtils.isNotBlank(callback)) { //如果是Jsonp请求
//把结果封装成一个js语句响应
return callback + "(" + JsonUtils.objectToJson(result) + ");";
}
return JsonUtils.objectToJson(result);
}
//第二种方式:MappingJacksonValue类自动拼装成JS语句。 (Spring4.1版本之后才支持)
@RequestMapping(value="/user/token/{token}")
@ResponseBody
public Object getUserByToken2(@PathVariable String token, String callback) {
E3Result result = tokenService.getUserByToken(token);
//响应结果之前,判断是否为jsonp请求
if (StringUtils.isNotBlank(callback)) { //如果是Jsonp请求
//把结果封装成一个js语句响应
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
mappingJacksonValue.setJsonpFunction(callback);
return mappingJacksonValue;
}
return result;
}
}
demo.html(前端):
$.ajax({
url : "http://localhost:8088/user/token/tokenId",
dataType : "jsonp",
type : "GET",
success : function(data){
//.....
}
});
上一篇: Sping 的常用注解(@annotation)说明
下一篇: Spring注解方式大势所趋(1)