在 spring 中出现错误时设置响应正文
Set response body in case of error in spring
我在 spring 中有一个 api,返回一个字节数组。万一有什么错误,是不是logical/possible加个response body?
例如:
@GetMapping(value = ["path"], produces = ["application/pdf"])
@ResponseBody
fun method(@PathVariable("varib") var: String?,
request: HttpServletRequest?, response:
HttpServletResponse?): ByteArray? {
// some method which will return a byte arrat
return pdf
}
@ExceptionHandler(RUnTimeException::class)
fun errorHandler(e: Exception,response: ServletRespons) {
response?.setHeader('someheader','value')
}
是否可以在异常情况下添加响应正文?来自 'errorHandler' 方法内部?合乎逻辑吗?
您可以添加 ControllerAdvice:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
@Slf4j
public class ExceptionHandlingAdvice {
private final Clock clock = Clock.systemDefaultZone();
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(Exception ex) {
return handleException(ex.getLocalizedMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
private ResponseEntity<ErrorResponse> handleException(String message, HttpStatus httpStatus) {
log.error("Error: " + message);
ErrorResponse errorResponse = ErrorResponse.of(Instant.now(clock), message);
return new ResponseEntity<>(errorResponse, httpStatus);
}
}
根据您使用的 Spring 版本,您不需要 @ResponseBody
。您应该使用 @ControllerAdvice
来帮助管理不同层(存储库、服务、控制器)中的所有异常。您可以定义代表您的 @Responsebody
的自定义响应消息。希望这篇可以帮到你。
我在 spring 中有一个 api,返回一个字节数组。万一有什么错误,是不是logical/possible加个response body?
例如:
@GetMapping(value = ["path"], produces = ["application/pdf"])
@ResponseBody
fun method(@PathVariable("varib") var: String?,
request: HttpServletRequest?, response:
HttpServletResponse?): ByteArray? {
// some method which will return a byte arrat
return pdf
}
@ExceptionHandler(RUnTimeException::class)
fun errorHandler(e: Exception,response: ServletRespons) {
response?.setHeader('someheader','value')
}
是否可以在异常情况下添加响应正文?来自 'errorHandler' 方法内部?合乎逻辑吗?
您可以添加 ControllerAdvice:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
@Slf4j
public class ExceptionHandlingAdvice {
private final Clock clock = Clock.systemDefaultZone();
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(Exception ex) {
return handleException(ex.getLocalizedMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
private ResponseEntity<ErrorResponse> handleException(String message, HttpStatus httpStatus) {
log.error("Error: " + message);
ErrorResponse errorResponse = ErrorResponse.of(Instant.now(clock), message);
return new ResponseEntity<>(errorResponse, httpStatus);
}
}
根据您使用的 Spring 版本,您不需要 @ResponseBody
。您应该使用 @ControllerAdvice
来帮助管理不同层(存储库、服务、控制器)中的所有异常。您可以定义代表您的 @Responsebody
的自定义响应消息。希望这篇