clientResponse.getEntity(String.class)返回HTML而不是JSON

时间:2018-03-19 09:56:07

标签: java json jersey

我正在尝试使用jersey客户端通过Web服务获取PreRegisterJsonResponse的对象,方法是将preRegisterId作为路径变量发送到服务,在Advanced REST客户端和Postman上测试它 - 它可以工作但是当我从java代码通过jersey客户端使用Web服务我得到HTML而不是JSON。

这是代码

WebService -

@GET
@ResponseBody
@RequestMapping("/userJSON2/{preRegisterId}")
public PreRegisterJsonResponse userJson2(@PathVariable long preRegisterId){
    PreRegisterJsonResponse pjr = new PreRegisterJsonResponse();
    try{
        PreRegister preRegUser = preRegisterDao.get(preRegisterId);
        pjr.setFirstName(preRegUser.getFirstName());
        pjr.setMiddleName(preRegUser.getMiddleName());
        pjr.setLastName(preRegUser.getLastName());
        pjr.setLoginId(preRegUser.getLoginId());
        pjr.setRoleId(preRegUser.getRole().getId());
        pjr.setUrlCode(preRegUser.getUrlCode());
        pjr.setCreatedBy(preRegUser.getCreatedBy().toString());
        if(preRegUser.getInvitedUnder() != null){
            pjr.setInvitedUnderId(preRegUser.getInvitedUnder().getId());
        }else{
            pjr.setInvitedUnderId(0);
        }
        pjr.setSkipBiometrics(preRegUser.isSkipBiometrics());
        pjr.setMainRecordOfficer(preRegUser.getMainRecordOfficer());
        pjr.setEmployeeId(preRegUser.getEmployeeId());
        if(preRegUser.getFond() != null){
            pjr.setFondId(preRegUser.getFond().getId());
        }else{
            pjr.setFondId(0);
        } 
    } catch(Exception ex){
        logger.error("Exception in WebServiceController:userJson2() "+ex.getMessage());
    }

    return pjr;
}

泽西岛客户 -

    public static void getInvitedUser(){
    try{
        Gson gson = new Gson();
        Client client = Client.create();
        WebResource webResource = client.resource("http://localhost:8080/webApplication/rest/UserJSON2/"+preRegisterId);
        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);

        if (response.getStatus() != 200) {
           throw new Exception("Exception in getInvitedUser() : "+ response.getStatus());
        }

        String output = response.getEntity(String.class);
        System.out.println("Output from Server .... \n");
        System.out.println(output);
        preRegisterUser = gson.fromJson(output, PreRegister.class);
    }catch(Exception ex){
        ex.printStackTrace();
    }
    }

通过邮递员和ARC-

消费网络服务后
{
"firstName": "fname",
"middleName": null,
"lastName": "lname",
"loginId": "mith11395@gmail.com",
"roleId": 4,
"urlCode": "1c5f8f37dfb1483db1d694d82fbdcae5",
"createdBy": "50",
"invitedUnderId": 0,
"skipBiometrics": true,
"mainRecordOfficer": null,
"employeeId": "777777",
"fondId": 0
}

如上所示,通过泽西客户端使用Web服务后,我得到的是HTML内容而不是JSON -

Output from Server .... 
<HTML content .......>

然后我得到了这个例外 -

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 

我知道原因,它无法将JSON转换为对象,因为我们还没有收到JSON响应altogrther(这是实际问题)。 我也没有在错误日志中得到任何东西。 可能是什么原因,我错过了什么?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果你想要返回JSON,你应该使用@Produces(MediaType.APPLICATION_JSON)

来声明它
  

@Produces注释用于指定资源可以生成并发送回客户端的MIME媒体类型或表示。

在您的方法中添加行:

@RequestMapping("/userJSON2/{preRegisterId}")
@Produces(MediaType.APPLICATION_JSON)
public PreRegisterJsonResponse userJson2(@PathVariable long preRegisterId) {