RestAssured nie pokazuje jednego z pól podczas mapowania odpowiedzi

0

Mam dziwny problem z RestAssured, ponieważ nie widzę jednego z pól.

Gdy używam Postmana do wysyłania żądania:

curl --location 'http://localhost:8080/team/testing-endpoint' jako odpowiedź otrzymuję:

{
  "timestamp": "2024-03-09T18:24:10.622+00:00",
  "status": 404,
  "error": "Not Found",
  "message": "UserName: userNameToDeletedoes not belong to team: teamName",
  "path": "/team/testing-endpoint"
}

Gdy używam RestAssured:

given().get("team/testing-endpoint").then().extract().response().asString();

Otrzymuję:

{
  "timestamp": "2024-03-09T18:40:10.295+00:00",
  "status": 404,
  "error": "Not Found",
  "path": "/team/testing-endpoint"
}

Nie otrzymuję pola message w odpowiedzi w RestAssured

W celach testowych stworzyłem prosty punkt końcowy:

@GetMapping("testing-endpoint")
public ResponseEntity<?> testingEndpoint() {

   String userNameToDelete = "userNameToDelete";
   String teamName = "teamName";

   throw new ResponseStatusException(HttpStatus.NOT_FOUND,
            "UserName: " + userNameToDelete +  "does not belong to teammmmm: " + teamName);
}

Przeszukałem google, ale nie znalazłem odpowiedzi.
Nie wiem dlaczego nie mogę uzyskać dostęp do pola "message" przy użyciu odpowiedzi RestAssured.

Spotkał ktoś się z czymś takim i wie czym jest to spowodowane?

1

Obstawiam, ze to może być jakiś problem z tym, ze message jest specjalnie ucinany żeby nie pokazywać za dużo informacji. Spróbuj na razie dodać server.error.include-message do url i sprawdź czy zadziała
https://www.baeldung.com/spring-response-status-exception
tutaj masz wyjaśnione w podpunkcie 4.2

1

Nie podałeś swojej dokładnej konfiguracji, ale postawiłem sobie taki bare-bones projekt i tak jak pisał @MckMaciek, twój problem rozwiązuje dodanie property server.error.include-message=always. Spring Boot od wersji 2.3 domyślnie ukrywa pole message (BasicErrorController) i w moim przypadku dzieje się tak zarówno przy requestach curlem, jak i poprzez RestAssured. Mogę tylko zgadywać, że twój projekt jest odrobinę bardziej złożony niż ten jeden kontroler i konfiguracje testowa i nietestowa różnią się obsługą błędów. Używałem Spring Boota w wersji 3.2.3.

0

Hej,

@MckMaciek @graun

finalnie udało mi się ustalić, gdzie tkwił problem, a przynajmniej po części po dokładnie jeszcze nie znam genezy problemu.

Do komentarzu u Maćka napisałem, że nie pomogło dodanie server.error.include-message, ale przez pomyłkę dodałem ją w main zamiast w test
Po dodaniu w test problem został rozwiązany.

W głównej aplikacji ten properties domyślnie jest jako always ze względu na spring-boot-devtools.
Niestety nie było tak samo w testach, przez co mnie to zmyliło i na początku nie doszukiwałem się tu komplikacji.

Problem rozwiązany, dzięki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.