2016-11-30 110 views
0

我要處理這個異常:如何用Spring/JPA處理異常?

try { 
     save = usersRepository.save(user); 
} 
catch (Exception gottaCatchEmAll){ 
     System.out.println("got it"); 
} 

在日誌中我看到:

不能添加或更新子行,外鍵約束失敗

我怎麼能趕上它?

回答

1

我會建議編寫建議處理程序類來處理任何異常。例如,我假設你的例外類型是DataIntegrityViolationException。這將被包裹在某種DTO中,可以返回到前端或做你喜歡的東西。

@ControllerAdvice 
public class ExceptionHandler { 

    @ExceptionHandler(DataIntegrityViolationException.class) 
    @ResponseStatus(HttpStatus.BAD_REQUEST) 
    @ResponseBody 
    public ErrorDto processConstraintError(DataIntegrityViolationException ex) { 
    return new ErrorDto(ex.getMessage()); 
    } 

} 

不需要嘗試從JPA中捕捉任何東西。

+0

我把這個添加到我的項目中沒有任何事情發生,如何激活它爲特定的控制器? – user3871754

+0

除非您在建議註釋中指定'basePackages',否則它不綁定到特定的控制器。你需要顯示你的Spring配置在哪裏掃描這個包。 – Vaelyr

+0

在啓動時我在日誌中看到:尋找ControllerAdvice :: ExceptionHandler中檢測到ExceptionHandler方法,我使用spring引導+ spring安全性,我沒有任何額外的配置spring.jpa.show-sql = true – user3871754