2
考慮具有屬性name
的Person
實體,其註釋爲@NotNull
。然後一個簡單的PersonRepository
和這個回購暴露與春天數據休息。Spring數據REST Bean驗證
當我POST
創建一個新的Person
,如果name
屬性是null
一個ValidationException
預期發生。但是我實際上在客戶端上得到的是內部服務器錯誤(500),並且消息是在異常鏈中發生很多晚些時候發生的TransactionSystemException
。
我會期望得到的是一個壞請求(400)與實際ValidationException
和它的所有有用的信息,以便客戶能知道什麼是錯的發佈數據。
似乎有一種方法可以將自定義驗證器與SDR相關聯,如here所述。但問題是,這不是一個自定義的驗證器,它是在存儲庫被要求保存數據時發生的標準的bean驗證。所以我不確定這兩者是如何結合在一起的。
所以問題:
- 我有哪些選擇,讓客戶知道使用SDR時,有什麼不對所提交的數據?像什麼領域是無效的,什麼是每個領域的錯誤將是真棒。
- 有沒有關於這個地方的任何例子?
非常感謝。
這看起來像解決我的問題,正確的方法,以及相關的LIB是真棒。只是一件事,如果我可能會濫用這個問題。在我的具體情況下,我的異常鏈看起來像這樣:'ConstraintViolationException' - >'RollbackException' - >'TransactionSystemException'。我想定位'ConstraintViolationException',而不是其他的。那麼Spring會考慮哪個異常:鏈中的異常或最後一個異常? – user1387786
@ user1387786當然你的目標是鏈中的最後一個異常,在春天數據會是'DataIntegrityViolationException',或者如果你直接使用hibernate,它會是'ConstraintViolationException' –
看起來像這在SDR上不起作用,因爲例外被包裝。 https://github.com/jirutka/spring-rest-exception-handler/issues/5。 – user1387786