我正在尝试使用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(这是实际问题)。 我也没有在错误日志中得到任何东西。 可能是什么原因,我错过了什么?
任何帮助都将不胜感激。
答案 0 :(得分:0)
如果你想要返回JSON,你应该使用@Produces(MediaType.APPLICATION_JSON)
@Produces注释用于指定资源可以生成并发送回客户端的MIME媒体类型或表示。
在您的方法中添加行:
@RequestMapping("/userJSON2/{preRegisterId}")
@Produces(MediaType.APPLICATION_JSON)
public PreRegisterJsonResponse userJson2(@PathVariable long preRegisterId) {