简体   繁体   English

如何检查Resttemplate是否出错?

[英]How to check if Resttemplate gets error?

How can I check if I get an error with RestTemplate in my SpringBootApplication properly? 如何检查SpringBootApplication RestTemplate是否出现错误? I managed to create an ResponseErrorHandler but am not sure how to handle that error in my code. 我设法创建了ResponseErrorHandler但是不确定如何在我的代码中处理该错误。 So I want to print an error message if an error occured and else process the response if everything is ok. 因此,如果发生错误,我想打印一条错误消息,如果一切正常,则处理响应。 How can I do that? 我怎样才能做到这一点?

ErrorHandler: 的ErrorHandler:

public class MyErrorHandler implements ResponseErrorHandler {
    private boolean error;
    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        error = false;
        if(response.getStatusCode() == HttpStatus.FAILED_DEPENDENCY) {
            error = true;
            JOptionPane.showMessageDialog(null, "Error " + response.getStatusCode() + ": " /*Can I print my errormessage here?*/);
        }
    }

    @Override
    public boolean hasError(ClientHttpResponse response) throws IOException {
        return error;
    }

Getting Data: 获取数据:

HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.TEXT_PLAIN);
        headers.add("Accept", MediaType.TEXT_PLAIN_VALUE);
        HttpEntity<String> httpRequest = new HttpEntity<String>(request, headers);

        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setErrorHandler(new MyErrorHandler());
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());

        String response = (String) restTemplate.postForObject("http://127.0.0.1:8081/post", httpRequest, String.class);

        /*If error occured, print errormessage, else do something*/

Server: 服务器:

@PostMapping("/post")
    ResponseEntity add(@RequestBody String string) {

        if(acceptServerRequest)
            return ResponseEntity.ok("Post recieved: " + string);
        else
            return new ResponseEntity("Error!", HttpStatus.FAILED_DEPENDENCY);
    }

Instead of doing like this 而不是这样

 String response = (String) restTemplate.postForObject("http://127.0.0.1:8081/post", httpRequest, String.class);

You can do like this 你可以这样

ResponseEntity<String> response = (String) restTemplate.postForEntity("http://127.0.0.1:8081/post", httpRequest, String.class);

With this response object you can get status doing response.getStatus() which retuns an object of type HttpStatus which has various utility methods like 有了这个响应对象,你可以得到这样的地位response.getStatus()这retuns类型的对象HttpStatus拥有各种实用方法,如

is2xxSuccessful()
is4xxClientError()  

Which can be used to get the status's in general 通常可以用来获取状态

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM