Posiadam kontroler, który zwraca użytkownika
@GetMapping(value = "/account/{username}")
public
HttpEntity<UserProfileDTO> getProfile(
@ApiParam(value = "The user's name", required = true) @PathVariable String username
) {
return Optional
.ofNullable(userService.findOneByUsername(username))
.map(user -> ResponseEntity.ok().body(converterUserToUserProfileDTO.convert(user)))
.orElseGet(() -> ResponseEntity.notFound().build());
}
w tej wersji kontroler zwraca
ResponseEntity.notFound().build()
wszystko jet OK https://zapodaj.net/7f91c7119a9a1.png.html.
Jednak pomyślałem, aby spróbować coś wyrzucić w ResponseBody podczas rzucania błędu, dlatego utworzyłem wyjątek
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}
i kontroler dla niego
@RestControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
}
}
dodatkowo kontroler pobierający użytkownika rzuca teraz ten wyjątek zamiast zwracania NOT_FOUND
.orElseThrow(() -> new ResourceNotFoundException("User not found");
i tym oto sposobem dostaję NIC https://zapodaj.net/68c19d8b8e34e.png.html. Nawet brak kodu błędu. Może ktoś powiedzieć mi co robię nie tak?