gpt4 book ai didi

java - Restful Spring boot 应用程序中的异常映射

转载 作者:行者123 更新时间:2023-12-02 12:06:41 25 4
gpt4 key购买 nike

我有一个自定义异常类,当异常发生时我想将其作为 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,但我得到的数据很长,但数据不正确。谁能告诉我我哪里做错了。谢谢!

完整代码可以在 - 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 违背了该处理程序的目的。您应该返回传递给方法的异常

我 fork 了你的项目并在这里修复了它:https://github.com/olantobi/SpringCaching

关于java - Restful Spring boot 应用程序中的异常映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com