我有以下代码.
我想根据状态代码得到不同的错误消息,如果成功它应该返回对象..如何从一个方法返回这种不同的数据类型?
public EstimateTimeResult getEstimateTime(@RequestBody EstimateTimeCall estimateTimeCall,@PathVariable("empid") Long empid) throws IOException{
String URL=baseApi+"/estimates/time";
if(estimateTimeCall.getProduct_id().isEmpty() || estimateTimeCall.getProduct_id()==null || estimateTimeCall.getProduct_id()==""){
URL+="?start_latitude="+estimateTimeCall.getStart_latitude().toString()+"&start_longitude="+estimateTimeCall.getStart_longitude().toString();
}else{
URL+="?start_latitude="+estimateTimeCall.getStart_latitude().toString()+"&start_longitude="+estimateTimeCall.getStart_longitude().toString()+"&product_id="+estimateTimeCall.getProduct_id();
}
//Header Set
HttpHeaders requestHeaders=getHeader(empid);
//Do Request
HttpEntity requestEntity=new HttpEntity(requestHeaders);
ResponseEntity<EstimateTimeResult> response=restTemplate.exchange(URL,HttpMethod.GET,requestEntity,EstimateTimeResult.class);
org.springframework.http.HttpStatus statusCode=response.getStatusCode();
if(statusCode.value()==422){
return "Required start latitude,longitude";
}
return response.getBody();
}
Run Code Online (Sandbox Code Playgroud)
简单:在Java中不可能(除非您将返回类型更改为Object,但这是非常糟糕的做法).但是,"不推荐"将是更好的术语.
当然,你可以做这样的事情
class RequestResult {
static enum Result { PASS, FAIL };
private Whatever dataForPass;
private SomethingElse dataForFail;
Whatever get(){
return get((dataForFail)->throw new RequestError(dataForFail));
}
Whatever get(ErrorHandler handler){
if(dataForFail != null){
return handler.handle(dataForFail);
}
return dataForPass;
}
}
interface ErrorHandler{
Whatever handle(SomethingElse dataForFail) throws RequestError;
}
class RequestError extends RuntimeException{
SomethingElse data;
RequestError(SomethingElse data){
this.data=data;
}
}
Run Code Online (Sandbox Code Playgroud)
那么你可以让RequestResult句柄如何获取Whatever/ SomethingElsedata,例如:
Whatever data = result.get((dataForFail) -> ...);
//or throws a RequestError if `SomethingElse` presented.
Whatever data = result.get();
Run Code Online (Sandbox Code Playgroud)
然后创建这样一个对象; 并根据具有所需数据的对象的实际结果设置.通过这样做,该方法的返回类型可以是RequestResult; 你可以用它来传递和失败的请求.但这不是"标准做法".
相反:您只在方法通过时返回一些内容.否则,您将抛出一个适当的异常,其中包含调用者需要提供有用错误消息的信息.
换句话说:你应该清楚地区分"快乐"和"不快乐"的道路.在Java中,你可以通过在出现问题时抛出异常来做到这一点.
| 归档时间: |
|
| 查看次数: |
536 次 |
| 最近记录: |