1- Log exception occurs at service layer to the database log table from @AfterThrowing advice.
2- Show a meaningful error message to the client by using @RestControllerAdvice.
Run: spring-boot-controller-advice-aspect-handle-exception > mvnw.cmd spring-boot:run
Java 11
H2 Database Engine
spring boot
spring data jpa
spring web
spring aspects
hibernate
logback
maven
junit
Method : HTTP.POST
URL : http://localhost:8080/customer/save
Request :
{ "name":"name1", "age":1, "addresses":[ {"streetName":"software","city":"ankara","country":"TR"} ] }
Response :
HTTP response code 200
{ "id": 1, "name": "name1", "age": 1, "addresses": [ { "id": 1, "streetName": "software", "city": "ankara", "country": "TR" } ] }
Method : HTTP.POST
URL : http://localhost:8080/customer/save
Request :
{ "name": null, "age": null }
Response :
HTTP response code 500
{ "timestamp": "2021-04-13T19:29:07.112+00:00", "message": "not-null property references a null or transient value : com.company.customerinfo.model.Customer.age; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value : com.company.customerinfo.model.Customer.age", "details": "uri=/customer/save" }
Method : HTTP.GET
URL : http://localhost:8080/log/list
Input Test Data : No input, just fire the request.
Request :
{ }
Response :
HTTP response code 200
[ { "id": 1, "message": "org.hibernate.PropertyValueException: not-null property references a null or transient value : com.company.customerinfo.model.Customer.age" } ]