Spring Webflux Mono игнорирует статус ResponseEntity и возвращает 200 OK - PullRequest
0 голосов
/ 20 января 2020

У меня есть RestController, который выглядит так моего ResponseEntity игнорируется и 200 возвращается? Как я могу это исправить? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Я понял это. Конечная точка возвращалась Mono<*>

После того, как я изменил свой сервис на возврат AuthenticationResource вместо UserResource, я мог также сделать возврат конечной точки Mono<ResponseEntity<AuthenticationResource>>.

После этого ResponseEntity был соблюдается и используется как обычно.

0 голосов
/ 20 января 2020

Spring предоставляет ответ HTTP 200 (OK ) по умолчанию, когда конечная точка успешно возвращается. Чтобы вернуть пользовательский статус HTTP , используйте аннотацию @ ReponseStatus над функцией и передайте код состояния в скобках. Ваш фрагмент кода должен выглядеть следующим образом:

@RestController
@RequestMapping("/user")
class UserController(val userService: UserService) {

  @PostMapping("/register")
  @ResponseStatus(HttpStatus.CREATED)
  fun register(@RequestBody body: UsernamePasswordResource): Mono<*> {
    return userService.createUser(body.username, body.password)
        .map {ResponseEntity(it, HttpStatus.CREATED)}
        .doOnError {
          if (it is DuplicateUserException){
            ResponseEntity(ErrorResource(it.message!!), HttpStatus.BAD_REQUEST)
          } else {
            ResponseEntity(ErrorResource("Internal server error"), HttpStatus.INTERNAL_SERVER_ERROR)
          }
        }
  }
}
...