У меня есть следующий контроллер REST
import ...ApplicationUser
import org.springframework.http.HttpStatus
import org.springframework.web.bind.annotation.*
@RestController
@RequestMapping("/sign-up")
class SignUpController: BaseController() {
@ResponseStatus(HttpStatus.CREATED)
@PostMapping
fun signUp(@RequestBody applicationUser: ApplicationUser) {
applicationUser.password = bCryptPasswordEncoder.encode(applicationUser.password)
applicationUserRepository.save(applicationUser)
}
}
и модель / сущность
import java.util.*
import javax.persistence.*
@Entity
class ApplicationUser(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var id: Long? = null,
@Column(unique = true)
var username: String? = null,
var password: String? = null
) {
@Column(unique = true)
var email: String? = null
...
}
Итак, я намеренно пытаюсь сохранить user
с существующим email
иестественно, я получаю следующий бросок
{
"timestamp": "2019-01-29T15:40:45.784+0000",
"status": 500,
"error": "Internal Server Error",
"message": "could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
"path": "/sign-up"
}
Но у этого броска есть ПРИЧИНА , причина в том, что (на португальском языке, извините, смеется)
com.microsoft.sqlserver.jdbc.SQLServerException: Violação da restrição UNIQUE KEY 'UK_cb61p28hanadv7k0nx1ec0n5l'.Нет данных. Возможно, у вас нет дубликатов «dbo.application_user».Двойная копия (admin@email.com).
Итак, как отправить / поместить / присоединить причину к исключению ответа http?Как то так
{
"timestamp": ...,
"status": ...,
"error": ...,
"message": ...,
"cause": "here is the cause of all problems",
"path": ...
}
Это возможно?Спасибо за любое предложение!