没有控制器类的springboot异常处理

时间:2017-06-16 03:35:09

标签: spring-boot exception-handling

如何在没有控制器类的情况下处理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

http://localhost:8080/tasks

{
"name" : "test"
}

但是,

{
"name" : ""
}

返回500,而不是400错误。

请告诉我,如果没有控制器类处理此异常的任何方法。

1 个答案:

答案 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

相关问题