Обработка Отдыха sql исключение от клиента - PullRequest
1 голос
/ 21 июня 2020

Я работаю с весенней загрузкой, а android.

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

Я хочу показать сообщение об ошибке «клиентский пользователь уже существует»

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Это просто макет, основанный на моем производственном коде (извините за использование Kotlin, вы можете переформатировать его как Java):

  1. Создать единый формат ответа
data class Response @JsonCreator constructor (
    var message: String? = "",
    var success: Boolean = false,
    var data: Any? = null
)
Вернуть как ResponseEntity внутри контроллера
@PostMapping
fun createUser(@ResponseBody newUser): ResponseEntity<Response> {
    return ResponseEntity(
        Response(
            "Create user: ",
            true,
            this.userService.createUser(newUser)
        ),
        HttpStatus.OK
    )
}
Создать CustomException для выброса любого нежелательного условия
class ResourceNotFoundException: RuntimeException {
    var statusCode: Int? = null

    constructor(errorMessage: String, statusCode:Int): super(errorMessage) {
        this.statusCode = statusCode
    }
    constructor(errorMessage: String, cause: Throwable, statusCode: Int): super(errorMessage, cause) {
        this.statusCode = statusCode
    }
}
Создать пользователя, если возникает ошибка выше настраиваемого исключения
fun createUser(newUser: UserEntity): Boolean { // can be replaced by any response
    try {
        this.userRepository.save(newUser)
    } catch (e: DuplicateKeyException) {
        throw ResourceNotFoundException(
            "Client user already exists",   // custom http message
            "404"  // custom http status
        )
    }
    return true
}
Поймайте сообщение и покажите его пользователю из Android
showToast(response.message)

Надеюсь, это поможет

0 голосов
/ 06 июля 2020

Это сценарий проверки достоверности, а не случай обработки исключений. Вам нужно добавить проверку: -> сначала проверьте в БД, существует ли пользователь или нет, и если существует, выдает ошибку.

Мы добавляем проверку валидации, когда мы получаем ввод от пользователя. Мы выполняем обработку исключений, когда есть некоторая вероятность ошибки в коде или доверенном клиенте (например, в нашем UI-приложении logi c, где пользовательский ввод не задействован).

Для обработки исключения и отправки сообщения клиенту. Нам нужно использовать @ControllerAdvice: Учебники: обработка-исключений-с-controlleradvice Spring Docs: обработка исключений весной

...