首页 > 解决方案 > 无法在休息控制器中重定向响应

问题描述

我做了两个RestControllerapi。在第二个 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 的响应,我必须做哪些更改。

标签: javaspringspring-boot

解决方案


该问题是由于 GetMapping 引起的。

@GetMapping(value="checkStatus/{msisdn}",consumes=MediaType.APPLICATION_JSON_VALUE)

在第一个 Api 中替换为以下内容:

@GetMapping(value="checkStatus/{msisdn}")

推荐阅读