SpringBoot解决跨域问题

跨域问题

前后端分离的时候出现了跨域问题。。。。虽然可以用Jsonp的方式解决,但是axios推荐利用CORS方式解决。

解决方法

添加一个拦截器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.wordcard.filter;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @author 19745
*/
@Component
public class CORSFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE,PUT");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "accept,x-requested-with,Content-Type");
response.setHeader("Access-Control-Allow-Credentials", "true");
chain.doFilter(req, res);
}

@Override
public void destroy() {

}

}

NotNull等校验注解不生效

背景

学习SpringBoot项目中,单元测试时发现@NotNull等注解没有生效。

原因

没有在调用处添加@Validated@Valid注解。

示例

Entity

1
2
3
4
public Class User {
@NotBlank(message = "用户名不能为空")
private String username;
}

调用

  1. Controller类上添加@Validated注解。
  2. 如果是Entity类型的校验,需要在参数前加上@Valid。普通类型(如String)则不用。
1
2
3
4
5
@Validated
public class UserController {
public String getUsername(@Valid User user) {}
public String getStr(@NotNull String str) {}
}