Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring RestTemplate-根据http状态代码读取不同的对象类型?_Java_Spring_Resttemplate - Fatal编程技术网

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

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

我有客户机和服务器应用程序,都是用Java在spring中编写的。 我正在使用
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();
     }
}