gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:36:54 24 4
gpt4 key购买 nike

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

这是代码

网络服务-

@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;
}

Jersey 客户端 -

    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();
}
}

通过 Postman 和 ARC 使用 Web 服务后-

{
"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
}

通过 jersey 客户端使用 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 响应(这就是实际问题)。另外,我在错误日志中没有收到任何内容。可能是什么原因,我错过了什么吗?

如有任何帮助,我们将不胜感激。

最佳答案

在 Jersey 中,如果你想返回 JSON,你应该使用 @Produces(MediaType.APPLICATION_JSON) 声明它。

The @Produces annotation is used to specify the MIME media types or representations a resource can produce and send back to the client.

在您的方法中添加行:

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

关于java - clientResponse.getEntity(String.class) 返回 HTML 而不是 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49360057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com