从头用腾讯服务器搭了一个图书馆的前后端分离系统,前端使用Vue框架进行开发,后端使用springboot框架进行开发,有些费劲的地方记录一下,之前数据库Error executing DDL那个就是其中的一个。
跨域问题
后端逻辑运行起来之后,前端对其进行访问,会出现跨域问题。见图
跨域问题本质由于浏览器同源策略限制导致的,同源策略见浏览器同源策略,大体是同源策略一种安全策略,帮助阻隔恶意文档,减少可能被攻击的媒介。如果两个 URL 的protocol、port(如果有)和host都相同的话,则这两个URL是同源。
使用@CrossOrigin
来解决跨域问题。默认情况下,@CrossOrigin
允许在@RequestMapping
注解中指定的所有源和HTTP方法。
日志配置
logback-spring.xml
只有在Spring应用程序运行的时候才生效,即带有@SpringBootApplication
注解的类启动的时候才会生效。存放的位置是在SpringApplication主类所在的项目的resources目录,也就是application.yml或者application.properties所在的目录。
异常处理
对于一些参数不正确,或者没有数据等情况,程序不应正确返回,需要抛出对应的异常信息。则需要@RestControllerAdvice
进行统一异常处理,@RestControllerAdvice
都是对Controller
进行增强的,可以全局捕获spring mvc抛的异常。@ExceptionHandler(value = Exception.class)
的作用是用来捕获指定的异常。
@RestControllerAdvice
public class LibraryExceptionHandler {
private static Logger LOGGER = LoggerFactory.getLogger(LibraryExceptionHandler.class);
private Response getResponse(String content){
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(content,Response.class);
} catch (IOException e) {
return Response.error("","字符串转为对象出错");
}
}
/* 客户端请求的语法错误,服务器无法理解,抛出400状态码异常,H400Exception自定义类 */
@ExceptionHandler(value = {H400Exception.class, HttpClientErrorException.BadRequest.class})
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public Response h400(Exception e){
if (e instanceof H400Exception){
LOGGER.error(e.getMessage(),e);
H400Exception h400 = (H400Exception)e;
return Response.error(h400.getError(),h400.getMessage());
}else {
HttpClientErrorException.BadRequest badRequest = (HttpClientErrorException.BadRequest)e;
String responseBodyAsString = badRequest.getResponseBodyAsString();
return getResponse(responseBodyAsString);
}
}
}