Это просто макет, основанный на моем производственном коде (извините за использование Kotlin, вы можете переформатировать его как Java):
- Создать единый формат ответа
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)
Надеюсь, это поможет