【问题标题】:Getting two objects based on success or error Spring BootSpring Boot 根据成功或错误获取两个对象
【发布时间】:2019-11-20 00:17:39
【问题描述】:

我使用 Spring Boot 应用程序调用的服务根据 Http GET 请求成功或异常返回两种不同的对象类型。成功时返回“MyClass”对象,出现异常时返回“ErrorResponse”对象。我想知道如果它是正确的方式,我实现它的方式。

public class MyClass{

public ErrorResponse errorResponse;

//and some other fields here
}


@JsonIgnoreProperties
public class ErrorResponse {
    @JsonProperty("error")
    public Error error;

      @JsonProperty("version") 
      public String version;

}

public class Error {
    @JsonProperty("code")
    public String Code;

    @JsonProperty("message")
    public String Message;
}

我得到的错误响应方式是

    {
    "error": {
        "code": "invalidEntry",
        "message": "The request you are making is invalid, please check your request data"
    },
    "version": "2.1.1"
}

而我的实现如下:

HttpEntity<MyClass> entity = new HttpEntity<MyClass>(headers);

        ResponseEntity<MyClass> response = new ResponseEntity<MyClass>(HttpStatus.OK);

        try {
            response = restTemplate.exchange(url, HttpMethod.GET, entity, MyClass.class);
        } catch (HttpClientErrorException ex) {
            String responseBody = ex.getResponseBodyAsString();

            ObjectMapper mapper = new ObjectMapper();
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

            try {
                ErrorResponse errorResponse = mapper.readValue(responseBody, ErrorResponse.class);
                MyClass myClass = new MyClass();
                myClass.errorResponse = errorResponse;
                return myClass;
            } catch (JsonMappingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JsonProcessingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

return response.getBody();

【问题讨论】:

标签: java spring-boot exception


【解决方案1】:

我还没有运行您的代码,但似乎无论是否有异常,您都在返回“MyClass”对象。

例外情况:

MyClass myClass = new MyClass();
myClass.errorResponse = errorResponse;
return myClass;

要回答你的问题,不,这不是正确的实施方式。

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2020-04-10
    • 2021-08-01
    相关资源
    最近更新 更多