I'm trying to add an exception handler for ResponseStatusException in my Spring 3 project.
@ControllerAdvice
public class ErrorHandler extends ResponseEntityExceptionHandler {
@Autowired
private ObjectMapper objectMapper;
@ExceptionHandler({ResponseStatusException.class})
public ResponseEntity<Object> handle(ResponseStatusException e) {
ObjectNode node = objectMapper.createObjectNode()
.put("code", e.getStatusCode().value())
.put("details", e.getMessage());
return ResponseEntity.status(e.getStatusCode().value())
.contentType(MediaType.APPLICATION_JSON)
.body(node);
}
}
But, the handler doesn't get called when I throw an exception like this:
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "No id has been provided!");
This approach works for other custom exceptions I have. But, it doesnt seem to trigger when using ResponseStatusException. I'm not sure why.
Here is my pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>6.0.11</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.1.0</version>
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>3.1.0</version>
</dependency>