我用Spring Boot定义了一个REST服务,该服务返回一个接口。当服务中发生错误时,如何返回有意义的错误消息?结果,在浏览器上,我显示MyInterface类型的Json。
下面的代码是控制器调用的服务:
public MyInterface getSomeTask() {
// business logic here
MyInterface myObject= getRelatedClass();
if(myObject == null){
// how to return error message
}
return myObject;
}
答案 0 :(得分:-1)
一种可能性是抛出Exception,然后用Spring处理它,以便它返回正确的json。
您可能需要查看有关错误处理的this文章。
您可以创建自定义异常,该异常将被抛出逻辑中,然后对其进行处理:
if(myObject == null){
throw new CouldNotGetRelatedClassException();
}
在控制器中,您可以使用以下错误处理方法:
public class FooController {
@ExceptionHandler({ CouldNotGetRelatedClassException.class})
public void handleException() {
// logic of exception handling
}
}
另一种方法可能是创建带有@ControllerAdvice
注释的类,该类将对引发的异常创建自定义json响应:
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {CouldNotGetRelatedClassException.class})
protected ResponseEntity<Object> handleNotFound(
RuntimeException ex, WebRequest request) {
String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse,
new HttpHeaders(), HttpStatus.NOT_FOUND, request);
}
}
但是,您可能想知道错误响应的结构可能与普通对象不同,因此您可能希望使用不同的HTTP状态代码返回它,以便前端可以确定此消息将以不同的方式反序列化。