在Web后端开发过程中,为快速搭建应用,项目通常会进行以下基础公共内容的配置,具体如下:
1、接口统一返回工具类
// 接口统一返回工具类,可结合项目实际情况变更
package com.xxx.util;
public class Result<T> {
private String code;
private String msg;
private T data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Result() {}
public Result(T data) {
this.data = data;
}
public static Result success() {
Result result = new Result<>();
result.setCode("200");
result.setMsg("请求成功");
return result;
}
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>(data);
result.setCode("200");
result.setMsg("请求成功");
return result;
}
public static <T> Result<T> success(T data, String msg) {
Result<T> result = new Result<>(data);
result.setCode("200");
result.setMsg(msg);
return result;
}
public static Result error(String code, String msg) {
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
}
public static <T> Result<T> error(T data, String code, String msg) {
Result<T> result = new Result<>(data);
result.setCode(code);
result.setMsg(msg);
return result;
}
@Override
public String toString() {
return "Result{" +
"code='" + code + '\'' +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
2、全局异常配置类
// 自定义异常信息实体类,可结合项目实际情况变更
package com.xxx.exception;
public class MyException extends RuntimeException{
private String errorCode;
private String errorMsg;
public MyException() {}
public MyException(String errorMsg) {
this.errorMsg = errorMsg;
}
public MyException(String errorCode, String errorMsg){
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
// 全局异常配置类,可结合项目实际情况变更
package com.xxx.exception;
import ...
@ControllerAdvice
public class GlobalException {
@ExceptionHandler(MyException.class)
@ResponseBody
public Result<?> myException(MyException e){
System.out.println("自定义异常信息:"+e.getErrorMsg());
return Result.error(e.getErrorCode(),e.getErrorMsg());
}
@ExceptionHandler(SignatureException.class)
@ResponseBody
public Result<?> signatureException(SignatureException e){
System.out.println("权限验证异常信息:"+e.getMessage());
return Result.error("301","token无效签名,请重新登录!");
}
@ExceptionHandler(ExpiredJwtException.class)
@ResponseBody
public Result<?> expiredJwtException(ExpiredJwtException e){
System.out.println("权限验证异常信息:"+e.getMessage());
return Result.error("302","token已过期,请重新登录!");
}
@ExceptionHandler(IllegalArgumentException.class)
@ResponseBody
public Result<?> illegalArgumentException(IllegalArgumentException e){
System.out.println("权限验证异常信息:"+e.getMessage());
return Result.error("303","token无效或不存在,请重新登录!");
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Result<?> validException(MethodArgumentNotValidException e){
MethodArgumentNotValidException logicException = (MethodArgumentNotValidException)e;
FieldError fieldError = logicException.getBindingResult().getFieldError();
String msg = fieldError.getDefaultMessage();
System.out.println("权限验证异常信息:"+e.getMessage());
return Result.error("304",msg);
}
@ExceptionHandler(Exception.class)
@ResponseBody
public Result<?> allException(Exception e){
System.out.println("系统异常信息:"+e);
return Result.error("500","系统繁忙,请稍后再试!");
}
}
3、跨域配置类
package com.xxx.config;
import ...
//@Configuration
//public class CorsConfig implements WebMvcConfigurer {
// private CorsConfiguration corsConfig() {
// CorsConfiguration corsConfiguration = new CorsConfiguration();
// corsConfiguration.addAllowedOrigin("http://localhost:8080"); //仅允许该域名
// corsConfiguration.addAllowedHeader("*"); //允许所有请求头
// corsConfiguration.addAllowedMethod("*"); //允许所有的请求类型
// corsConfiguration.setMaxAge(3600L);
// corsConfiguration.setAllowCredentials(true); //允许请求携带验证信息(cookie)
// return corsConfiguration;
// }
//
// @Bean
// public CorsFilter corsFilter() {
// //存储request与跨域配置信息的容器,基于url的映射
// UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// source.registerCorsConfiguration("/**", corsConfig());
// return new CorsFilter(source);
// }
//}
@Configuration
public class CorsConfig {
private CorsConfiguration corsConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*"); //允许任何域名
corsConfiguration.addAllowedHeader("*"); //允许任何头
corsConfiguration.addAllowedMethod("*"); //允许任何方法
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfig()); //注册
return new CorsFilter(source);
}
}
上述三种基础配置内容来源于网络,本文仅做收集整理,若有侵权可联系删除 ,反馈邮箱:yourshare@foxmail.com。