springmvc的Response设计

返回数据状态dto定义:

public class StatusCode {

    /**
     * 成功
     */
    public static final int SUCCESS = 0;
    
    /**
     * 未知错误
     */
    public static final int UNKNOWN_ERROR = -1;
    
    /**
     * 参数校验失败
     */
    public static final int INVALID_PARAM = -100;
    
    /**
     * 被限流
     */
    public static final int SERVER_LIMIT = -200;


}

response最基类定义:

@Data
public class HttpResponseDto {

    @JsonProperty("status_code")
    protected int statusCode = StatusCode.SUCCESS;
    
    @JsonProperty("status_msg")
    protected String statusMsg = "success";
    
    public HttpResponseDto() {
    }
    
    public HttpResponseDto(int statusCode, String statusMsg) {
        this.statusCode = statusCode;
        this.statusMsg = statusMsg;
    }

}

存放response数据dto定义

@Data
public class HttpResponseDataDto<T> extends HttpResponseDto {

    private T data;
    
    public HttpResponseDataDto(T data) {
        this.data = data;
    }
    
    public HttpResponseDataDto(int statusCode, String statusMsg) {
        super(statusCode, statusMsg);
    }

}


异常情况下,写个拦截器完成response异常数据填充

/**
* 全局异常拦截器
*/
@ControllerAdvice
public class ThrowableHandler {


    @ExceptionHandler(value = Throwable.class)
    @ResponseBody
    public HttpResponseDto throwableHandler(HttpServletRequest req, Throwable ex) {
        HttpResponseDto objectHttpResponseDto = new HttpResponseDto();
        objectHttpResponseDto.setStatusCode(StatusCode.UNKNOWN_ERROR);
        objectHttpResponseDto.setStatusMsg(ex.toString());
        return objectHttpResponseDto;
    }


    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    @ResponseBody
    public HttpResponseDto methodArgumentNotValidExceptionHandler(HttpServletRequest req, MethodArgumentNotValidException ex) {
        HttpResponseDto objectHttpResponseDto = new HttpResponseDto();
        objectHttpResponseDto.setStatusCode(StatusCode.INVALID_PARAM);
        objectHttpResponseDto.setStatusMsg(ex.getBindingResult().getFieldError().getDefaultMessage());
        return objectHttpResponseDto;
    }

}

使用案例:

@Slf4j
@RestController
@RequestMapping("html_to_pdf")
public class HtmlToPdfController {

    @Autowired
    private IHtmlToPdfService htmlToPdfService;

    private Semaphore semaphore = new Semaphore(4);

    @PostMapping("sync")
    public HttpResponseDataDto<ToPdfResultDto> convert(@RequestBody @Validated HtmlToPdfDto htmlToPdf) {

        if (semaphore.tryAcquire()) {
            ToPdfResultDto result;
            try {
                result = htmlToPdfService.convert(htmlToPdf);
            } finally {
                semaphore.release();
            }
            return new HttpResponseDataDto<>(result);
        } else {
            log.warn("html to pdf server limited");
            return new HttpResponseDataDto<>(StatusCode.SERVER_LIMIT, "server limited");
        }
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值