[英]Exception Mapping in Restful Spring boot application
我有一個自定義的Exception類,當發生異常時,我想作為json返回。
SpringCacheException.java
@JsonSerialize
public class SpringCacheException extends Exception{
private static final long serialVersionUID = 1L;
private HttpStatus status;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
private LocalDateTime timestamp;
private String message;
private String debugMessage;
public SpringCacheException(HttpStatus status, String message, String debugMessage) {
super();
this.setStatus(status);
this.message = message;
this.debugMessage = debugMessage;
}
public SpringCacheException() {
timestamp = LocalDateTime.now();
}
public SpringCacheException(HttpStatus status) {
this();
this.setStatus(status);
}
public SpringCacheException(HttpStatus status, Throwable ex) {
this();
this.setStatus(status);
this.setMessage("Unexpected error");
this.setDebugMessage(ex.getLocalizedMessage());
}
public SpringCacheException(HttpStatus status, String message, Throwable ex) {
this();
this.setStatus(status);
this.setMessage(message);
this.setDebugMessage(ex.getLocalizedMessage());
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getDebugMessage() {
return debugMessage;
}
public void setDebugMessage(String debugMessage) {
this.debugMessage = debugMessage;
}
public HttpStatus getStatus() {
return status;
}
public void setStatus(HttpStatus status) {
this.status = status;
}
}
RestExceptionHandler.java
@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {
private static final Logger logger= LoggerFactory.getLogger(ContactServiceImpl.class);
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
SpringCacheException errorMessage = new SpringCacheException(status.BAD_REQUEST,"My Error",ex);
return new ResponseEntity<Object>(errorMessage, headers, status);
}
@ExceptionHandler(SpringCacheException.class)
ResponseEntity<Object> handleBadRequests(HttpStatus status,String message,SpringCacheException ex) throws IOException {
SpringCacheException errorMessage = new SpringCacheException(HttpStatus.BAD_REQUEST,"My Error",ex);
return new ResponseEntity<Object>(errorMessage,HttpStatus.BAD_REQUEST);
}
}
拋出異常:
@Override
public Contact show(int id) throws SpringCacheException {
try {
Contact contact = contactRepository.findOneById(id);
return contact;
}
catch (Exception e) {
throw new SpringCacheException();
}
}
在這里,我正在從數據庫中刪除聯系人表,並且引發了異常,並且得到了以下較長的響應。
Position: 111
2017-10-22 00:37:08.577 WARN 10336 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Failed to invoke @ExceptionHandler method: org.springframework.http.ResponseEntity<java.lang.Object> com.myapp.exception.RestExceptionHandler.handleBadRequests(org.springframework.http.HttpStatus,java.lang.String,com.myapp.exception.SpringCacheException) throws java.io.IOException
我只想要一個SpringCacheException類型的json,但是我得到的是帶有錯誤數據的長json。 誰能告訴我我在哪里做錯了。 謝謝 !
整個代碼可以在以下位置找到-https: //github.com/iftekharkhan09/SpringCaching
您的異常處理程序方法需要SpringCacheException對象的單個參數(其批注中的類)。
@ExceptionHandler(SpringCacheException.class)
ResponseEntity<Object> handleBadRequests(SpringCacheException ex) throws IOException {
//SpringCacheException errorMessage = new SpringCacheException(HttpStatus.BAD_REQUEST,"My Error",ex);
return new ResponseEntity<Object>(ex, HttpStatus.BAD_REQUEST);
}
}
順便說一句,創建一個新的SpringCacheException違反了該處理程序的目的。 您應該返回傳遞給方法的異常
我分叉了您的項目,並將其固定在這里: https : //github.com/olantobi/SpringCaching
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.