I'm having problems with the fallback implementation. For some reason, when my service is not running, I get error 500, and there is no fallback interception That's my implementation:
@FeignClient(name = "planner-users", fallback = UserFeignClientFallback.class)
public interface UserFeignClient {
@PostMapping("/user/id")
ResponseEntity<User> findUserById(@RequestBody Long id);
}
@Component
class UserFeignClientFallback implements UserFeignClient {
@Override
public ResponseEntity<User> findUserById(Long id) {
return null;
}
}
ResponseEntity<User> result = userFeignClient.findUserById(category.getUserId());
if (result == null){
return new ResponseEntity("System users doesn't work right now", HttpStatus.NOT_FOUND);
}
if (result.getBody() != null)
return ResponseEntity.ok(categoryService.add(category));
return new ResponseEntity("user id=" + category.getUserId() + " not found", HttpStatus.NOT_ACCEPTABLE);
@Component
public class FeignExceptionHandler implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
switch (response.status()) {
case 406: {
return new ResponseStatusException(HttpStatus.NOT_ACCEPTABLE, readMessage(response));
}
}
return null;
}
private String readMessage(Response response) {
String message = null;
Reader reader = null;
try {
reader = response.body().asReader(Charset.defaultCharset());
message = CharStreams.toString(reader);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null)
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return message;
}
}
I have added the following dependencies:
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix:+'
implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j:+'
Also I added next conf in git property:
feign.circuitbreaker.enabled=true
My service reads the config, because it connected to server.
I've read this question - Spring cloud openfeign 3.0.1 fallback not being triggered but it doesn't work :(
This is the answer in Postman:"timestamp": "2023-10-20T16:24:43.978+00:00", "status": 500, "error": "Internal Server Error", "message": "Cannot throw exception because the return value of \"feign.ResponseHandler.decodeError(String, feign.Response)\" is null", "path": "/category/add"