java - 无法在休息控制器中重定向响应
问题描述
我做了两个RestController
api。在第二个 api 的响应中,我想要第一个 api 的响应(这是一个json
响应),所以我尝试使用HttpServletResponse.redirect
. 我也设置content type
了它。但是在第二个 api 响应中我得到了Unsupported Media Type
Content type 'null' not supported
。
第一个 API
@GetMapping(value="checkStatus/{msisdn}",consumes=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<CoreResponseHandler> fetchOcsByDate2(@PathVariable(value="msisdn",required=true)String msisdn){
long l_time_start = System.currentTimeMillis();
List<Object[]> list = repository.getSingleCallDetail(msisdn);
if(list==null || list.size()==0) {
System.out.println("NO RECORD FOUND");
}
JSONObject objMain = new JSONObject();
for(Object[] objArr: list) {
JSONObject obj = new JSONObject();
String msisdn_ = objArr[0]==null?null:objArr[0].toString();
String songId = objArr[1]==null?null:objArr[1].toString();
String songName = objArr[2]==null?null:objArr[2].toString();
String status = objArr[3]==null?null:objArr[3].toString();
String lang = objArr[4]==null?null:objArr[4].toString();
String startDate = objArr[5]==null?null:objArr[5].toString();
objMain.put("status", status);
objMain.put("language", lang);
obj.put("id", songId);
obj.put("msisdn", msisdn);
obj.put("songName", songName);
objMain.put("subscription", obj);
}
long l_time_end = System.currentTimeMillis();
long l_diff = l_time_end-l_time_start;
if(list!=null && list.size()>0) {
return new ResponseEntity<CoreResponseHandler>(new SuccessResponseBeanRefined(HttpStatus.OK, ResponseStatusEnum.SUCCESSFUL, ApplicationResponse.SUCCESSFUL, objMain,l_diff+" ms"),HttpStatus.OK);
}
if(list==null || list.size()==0) {
return new ResponseEntity<CoreResponseHandler>(new SuccessResponseBeanRefined(HttpStatus.NOT_FOUND, ResponseStatusEnum.FAILED, ApplicationResponse.Failed, "not found",l_diff+" ms"),HttpStatus.NOT_FOUND);
}
return new ResponseEntity<CoreResponseHandler>(new SuccessResponseBeanRefined(HttpStatus.BAD_REQUEST, ResponseStatusEnum.FAILED, ApplicationResponse.Failed," > Bad request",l_diff+" ms"),HttpStatus.BAD_REQUEST);
}
输出没有问题。顺利运行
第二个 API
@GetMapping(value="verifyOtp/{msisdn}/{otp}",consumes=MediaType.APPLICATION_JSON_VALUE)
public void verifyOtp(@PathVariable(value="msisdn",required=true)String msisdn,
@PathVariable(value="otp",required=true)String otp,HttpServletResponse response) throws Exception{
long l_time_start = System.currentTimeMillis();
long l_time_end = System.currentTimeMillis();
long l_diff = l_time_end-l_time_start;
List<Object[]> list = repository.verifyOtp(msisdn,otp);
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
if(list!=null && list.size()>0) {
for(Object[] obj:list) {
String strDate = obj[3]==null?null:obj[3].toString();
Date dtDb = sdf.parse(strDate);
Date dtNow = new Date();
String strDtNow = sdf.format(dtNow);
dtNow = sdf.parse(strDtNow);
long ldtDb = dtDb.getTime();
long ldtNow = dtNow.getTime();
if(ldtDb>ldtNow) {
System.out.println("success within time");
int ii = repository.updateIsActive(msisdn);
response.setContentType("application/json");
response.sendRedirect("http://localhost:9393/crbt/api/subscriber/ivr/checkStatus/"+msisdn);
}
else {
System.out.println("failure time over!");
}
}
}
else {
}
}
postman 中的第二个 Api 响应
我所期望的是第一个 API 的响应。但它给了我一些 415 内容类型错误
如何从第二个 api 的响应中获得第一个 API 的成功 json 响应。我什至尝试过org.springframework.http.HttpHeaders
但无法获得所需的输出。为了在我的第二个 api 响应中获得第一个 Api 的响应,我必须做哪些更改。
解决方案
该问题是由于 GetMapping 引起的。
@GetMapping(value="checkStatus/{msisdn}",consumes=MediaType.APPLICATION_JSON_VALUE)
在第一个 Api 中替换为以下内容:
@GetMapping(value="checkStatus/{msisdn}")
推荐阅读
- autodesk-forge - 强制 Revit 文件通过 Navis 转换
- c# - 如何根据另一个字段的值使一个字段成为必填字段
- sql-server - 优化sql插入
- sql - 如何使用具有互斥外键的 LINQ 连接三个表?
- c++ - 在执行 REST API 调用时,这是在 C++ 中构建依赖关系树的最有效方法
- c# - 将多个选定的列表框项目保存到数据库
- dictionary - Jenkins Pipeline 中的 Groovy Map 截断字符
- kubernetes - 访问 Kubernetes 负载均衡器服务后面的客户端 IP 地址
- javascript - 在函数中设置状态不起作用 - reactJs
- javascript - 填写外部站点的登录详细信息