org.springframework.web.client.HttpClientErrorException 400 RestTemplate.postForEntity - PullRequest
0 голосов
/ 10 октября 2018

Я использую API, который должен тип ответа ответа 200 и Плохой ответ 400, оба из которых имеют параметры внутри тела ответа, но проблема в том, что я не могу получить параметры неверного ответа, которые он выдает это исключение

public ResponseEntity<String> balanceInquiry(BalanceInquiryRequestDto balanceInquiryRequestDto) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        httpHeaders.set("API-KEY", "5d6f54d4");
        HttpEntity<BalanceInquiryRequestDto> request = new HttpEntity<BalanceInquiryRequestDto>(balanceInquiryRequestDto , httpHeaders);

        ResponseEntity<String> postForEntity = 
                restTemplate.postForEntity(uri , request, String.class);
        return postForEntity;

}

работает хорошо, когда ответ в порядке 200

1 Ответ

0 голосов
/ 11 октября 2018

Я создал небольшой весенний загрузочный проект, чтобы продемонстрировать, что вы можете сделать.

Сначала простой сервис, который выдаст нам ошибку при вызове:

@RestController
public class Endpoint {

    @GetMapping("/error")
    public ResponseEntity createError() {

        ErrorDetails errorDetails = new ErrorDetails("some error message");
        return ResponseEntity.status(400).body(errorDetails);;
    }
}

Детали ошибок, которые вы хотите извлечь, аналогичны приведенным в этом примере:

@AllArgsConstructor
@Getter
@Setter
@ToString
@EqualsAndHashCode
public class ErrorDetails {
    private String errorMessage;


}

А затем еще одна конечная точка с клиентом, который вызывает отказавший сервис.Возвращает сведения об ошибке:

@RestController
public class ClientDemo {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/show-error")
    public String createError() {

        try{
            return restTemplate.getForEntity("http://localhost:8080/error", String.class).getBody();
        } catch(HttpClientErrorException | HttpServerErrorException ex) {
            return ex.getResponseBodyAsString();
        }
    }
}

Для завершения:

@SpringBootApplication
public class StackoverflowApplication {

    public static void main(String[] args) {
        SpringApplication.run(StackoverflowApplication.class, args);
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

При переходе к http://localhost:8080/show-error вы видите это:

{
"errorMessage": "some error message"
}
...