浏览器跨域
跨域的说明可以看 跨域访问
SpringBoot中跨域解决
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;
/**
* 解决 jsonp 跨域,当请求参数中有callback参数,并前端 Ajax 请求方式为jsonp 时,
* 返回数据格式: callback({})
* <p>
* Created by Demon-HY on 2018/4/30 0030.
*/
@ControllerAdvice(basePackages = "com.test.http")
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
super("callback", "jsonp");
}
/**
* 防止post请求时,callback="" 的情况
* @param value
* @return
*/
@Override
protected boolean isValidJsonpQueryParam(String value) {
return !StringUtils.isNotEmpty(value) && super.isValidJsonpQueryParam(value);
}
}
只需要创建上述类就可以实现jsonp跨域,不需要在Controller中再加入callback参数,上面的 basePackages
是controller拦截器,需要按照自己的项目去配置,下面是测试代码:
import com.test.util.ClientResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.Serializable;
@RestController
public class HelloHttpApi implements Serializable {
@RequestMapping("jsonp")
public ClientResult testJsonp() {
return new ClientResult();
}
}