Java Spring RestTemplate-根据http状态代码读取不同的对象类型?
我有客户机和服务器应用程序,都是用Java在spring中编写的。 我正在使用Java Spring RestTemplate-根据http状态代码读取不同的对象类型?,java,spring,resttemplate,Java,Spring,Resttemplate,我有客户机和服务器应用程序,都是用Java在spring中编写的。 我正在使用restemplate从客户端调用服务器 服务器根据操作结果返回不同的响应对象。简化代码: public ResponseEntity<?> saveSomething (Object something) { boolean saved = save(something); //save logic if(saved) return new ResponseEntity&l
restemplate
从客户端调用服务器
服务器根据操作结果返回不同的响应对象。简化代码:
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);
}
这有可能以一种非黑客的、干净的方式实现吗?我读过关于将响应类型设置为String.class
并随后对其进行解析的内容,或者读过Object.class
(返回LinkedHashMap
)并对其进行解析的内容。感谢您提供的提示。我建议引入一个常见的响应,其中包括ok和error(其中一个为null) 并使用它
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 ResponseEntity saveSomething(objectsomething){
布尔保存=保存(某物);//保存逻辑
如果(已保存)
返回新的ResponseEntity(新的CommonResponseObject(okObject)),HttpStatus.OK;
其他的
返回新的ResponseEntity(新的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();
}
}
public void saveSomething(要保存的对象){
重新模板化模板=新的RestTemplate();
ResponseEntity 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();
}
}
这真的很糟糕,因为有了更多响应对象,您将传输更多冗余数据;在代码中,也会有许多响应类封装在一个响应类中,以便能够获得响应。这是我不想要的那种下流的方式。但是谢谢你的回复,再多一点。。其中一个确定/错误始终为空。您可以将序列化配置为跳过空值。额外的信息(在json的情况下)只是字段名ok或error。您也可以只发送一个字符串,检查状态并将字符串反序列化为ok或error objectCustom wrapper对象,字符串反序列化在代码中可能看起来不太好,但我仍然在寻找可用的最佳解决方案,可能就是这样。谢谢:)
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();
}
}