返回数据状态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");
}
}
}