gpt4 book ai didi

java - Spring RestTemplate - 根据 http 状态代码读取不同的对象类型?

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:22 24 4
gpt4 key购买 nike

我有客户端和服务器应用程序,它们都是在 spring 中使用 Java 编写的。我正在使用 RestTemplate从客户端调用服务器。

服务器根据操作结果返回不同的响应对象。
简化代码:

public ResponseEntity<?> saveSomething (Object something) {
boolean saved = save(something); //save logic
if(saved)
return new ResponseEntity<OKObject>(okObject,HttpStatus.OK);
else
return new ResponseEntity<ErrorObject>(errorObject,HttpStatus.FAILED);
}

我希望能够通过状态代码读取客户端上的那些响应,
但是 RestTemplate 只提供读取一种类型,例如<Object_type>.class ;并在 .getForEntity(...) 之后提供状态代码操作已执行 - 当响应类型已经返回时。
我在客户端的伪代码中想要什么:

public void saveSomething(Object toSave) {
ResTemplate template = new RestTemplate();
ResponseEntity<Object> response = template.getForEntity(url,Object.class);
if(response.getStatusCode() == HttpStatus.OK) {
OKObject ok = (OKObject) response.getBody();
//some work with ok object
}
if(response.getStatusCode() == HttpStatus.FAILED) {
ErrorObject errorObject = (ErrorObject) response.getBody();
//some work with errorObject
}
}

这是否可能以某种非 hacky、干净的方式实现?我读到有关将响应类型设置为 String.class 的信息然后解析它,或者阅读 Object.class (返回 LinkedHashMap )并解析它。
感谢您提供任何提示。

最佳答案

我建议引入一个通用的响应,其中包括 ok 和 error(其中一个为 null)

publi class CommonResponseObject {
private OKObject okObject;
private ErrorObject errorObject;
public CommonResponseObject(OKObject okObject) {
this.okObject=okObject;
}
public CommonResponseObject(ErrorObject errorObject) {
this.errorObject=errorObject;
}
}

并使用它

public ResponseEntity<CommonResponseObject > saveSomething (Object something) {
boolean saved = save(something); //save logic
if(saved)
return new ResponseEntity<>(new CommonResponseObject(okObject),HttpStatus.OK);
else
return new ResponseEntity<>(new CommonResponseObject(errorObject),HttpStatus.FAILED);
}

并处理结果

public void saveSomething(Object toSave) {
ResTemplate template = new RestTemplate();
ResponseEntity<CommonResponseObject> response = template.getForEntity(url,CommonResponseObject.class);
if(response.getStatusCode() == HttpStatus.OK) {
OKObject ok = response.getBody().getOkObject();
}
if(response.getStatusCode() == HttpStatus.FAILED) {
ErrorObject errorObject = response.getBody().getErrorObject();
}
}

关于java - Spring RestTemplate - 根据 http 状态代码读取不同的对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45191831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com