Web后端开发常用基础公共内容

       在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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值