У вас есть несколько вариантов:
Если вам нужен только этот User
экземпляр объекта, вы можете сделать это методом retrieve()
, где вторым параметром является класс домена (User
в вашем случае) и тогда вы можете использовать переменную user
так, как вам нужно:
User user = client.toBlocking().retrieve(HttpRequest.POST("/", user), User.class);
assertThat(user)
.isNotNull()
.extracting(User::getName)
.isEqualTo("sample");
Если вам нужен также объект ответа (например, чтобы иметь возможность проверить код ответа), тогда вы должны использовать метод exchange()
и затем получите экземпляр User
, вызвав метод body()
для этого ответа:
HttpResponse<User> response = client.toBlocking()
.exchange(HttpRequest.POST("/", user), User.class);
assertThat(response)
.isNotNull()
.extracting(HttpResponse::body)
.extracting(User::getName)
.isEqualTo("sample");
Обновление : когда вам нужно использовать класс generi c как Затем в качестве ответа вы должны использовать Argument.of()
в качестве второго параметра методов retrieve()
и exchange()
, где вы можете указать класс ответа generi c и параметры его типа. См. Пример:
Response<User> response = client.toBlocking()
.retrieve(HttpRequest.POST("/", user), Argument.of(Response.class, User.class));
assertThat(response)
.isNotNull()
.extracting(Response::getData)
.extracting(User::getName)
.isEqualTo("sample");
Если вы сделаете это без Argument.of()
, тогда свойство data
будет преобразовано в LinkedHashMap
вместо User
, а это:
Response<User> response = client.toBlocking().retrieve(HttpRequest.POST("/", user), Response.class);
response.getData().getName();
... выбросит ClassCastException
:
java .lang.ClassCastException: класс java .util.LinkedHashMap не может быть приведен к классу my.app.domain.User (java .util.LinkedHashMap находится в модуле java .base загрузчика 'bootstrap'; my.app.domain.User.User находится в безымянном модуле загрузчика 'app')