如何在没有控制器类的情况下处理Spring Boot 1.5.4中的异常处理?目前,我只有实体&存储库类如下。
Task.class :( entity)
@Entity
@Table(name = "task")
public class Task implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private long id;
@Length(min = 1)
private String name;
public Task() {
}
public Task(String name) {
this.name = name;
}
public Task(Long id, String name) {
this.name = name;
}
public long getId() {
return id;
}
public String getName(){
return name;
}
}
Repository.class:
public interface TaskRepository extends PagingAndSortingRepository<Task, Long> {
}
POST方法:返回200 ok
{
"name" : "test"
}
但是,
{
"name" : ""
}
返回500,而不是400错误。
请告诉我,如果没有控制器类处理此异常的任何方法。
答案 0 :(得分:1)
您可以使用带有@ExceptionHandler注释的全局@ControllerAdvice。基本上,您使用@ControllerAdvice批注定义要在类中使用@ExceptionHandler处理哪个Exception,然后实现在抛出异常时要执行的操作。
像这样:
@ControllerAdvice(basePackageClasses = RepositoryRestExceptionHandler.class)
public class GlobalExceptionHandler {
@ExceptionHandler({ValidationException.class, JsonParseException.class})
public ResponseEntity<Map<String, String>> yourExceptionHandler(Exception e) {
Map<String, String> response = new HashMap<String, String>();
response.put("message", "Bad Request");
return new ResponseEntity<Map<String, String>>(response, HttpStatus.BAD_REQUEST);
}
}
另请参阅:http://www.ekiras.com/2016/02/how-to-do-exception-handling-in-springboot-rest-application.html