Как сгенерировать CAUSE на http запрос исключения - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующий контроллер 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": ...
}

Это возможно?Спасибо за любое предложение!

1 Ответ

0 голосов
/ 29 января 2019

Вы можете использовать ControllerAdvice для обработки подобных исключений.Вы можете настроить его, чтобы перехватывать любые исключения в приложении, а затем возвращать соответствующий код ответа / сообщение.Вы можете прочитать больше об этом здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...