java – Jersey JSON响应为HttpUrlConnector而不是JSON
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Jersey JSON响应为HttpUrlConnector而不是JSON,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2875字,纯文字阅读大概需要5分钟。
内容图文
![java – Jersey JSON响应为HttpUrlConnector而不是JSON](/upload/InfoBanner/zyjiaocheng/804/d3ff0819c8da4a69bbf740709e63d2fd.jpg)
我正在尝试使用Jersey 2.13作为服务器进行小型REST服务,将Vaadin 7.3.3作为“客户端”,但想法是请求可以来自任何地方(不仅仅是Vaadin,这就是为什么我不使用在请求时间的bean).假设用户已经注册,请求只检查他是否存在,并返回令牌.我收到了一个POST URL,https:// localhost:8443 / logins
{
"login-request":
{
"username":<insert username>,
"password":<insert password>
}
}
并返回:
{
"login-token":
{
"token":<insert token>
}
}
我的客户请求代码是:
Client client = ClientBuilder.newClient();
WebTarget target = client.target("https://127.0.0.1:8443/").path(appName + "/logins");
//build JSON Object
HashMap<String, String> userMap = new HashMap<>();
userMap.put("username", user.getUsername());
userMap.put("password", user.getPassword());
//JSON logins request!
JSONObject jsonLoginRequest = new JSONObject();
try {
jsonLoginRequest.put("login-request", userMap);
} catch (JSONException e) {
e.printStackTrace();
}
return target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(jsonLoginRequest.toString()));
服务器处理代码是:
@POST
@Path("logins")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response generateToken(@Context HttpServletRequest request) {
if (request != null) {
User user;
DBHandshaker handshaker = DBHandshaker.getInstance();
user = handshaker.logUser(request.getParameter("username"), request.getParameter("password"));
if (user != null) {
StringUtil stringUtil = StringUtil.getInstance();
String tokenString = stringUtil.encryptForToken(user.getUsername(), user.getPassword());
HashMap<String, String> tokenMap = new HashMap<>();
tokenMap.put("token", tokenString);
JSONObject jsonLoginResponse = new JSONObject();
try {
jsonLoginResponse.put("login-token", tokenMap);
} catch (JSONException e) {
e.printStackTrace();
}
return Response.ok(jsonLoginResponse.toString(), MediaType.APPLICATION_JSON).build();
} else {
return Response.status(Response.Status.UNAUTHORIZED).build();
}
} else {
return Response.status(Response.Status.NO_CONTENT).build();
}
}
我的客户回复“捕手”是:
LoginParser loginParser = new LoginParser();
Response response = loginParser.parseRequest(username, password);
boolean isValidLogin = Response.Status.OK.getStatusCode() == response.getStatusInfo().getStatusCode();
if (isValidLogin) {
// Store the current username in the service session
getSession().setAttribute("user", username);
HttpEntity entity = (HttpEntity) response.getEntity();
try {
String retSRc = EntityUtils.toString(entity);
JSONObject jsonObject = new JSONObject(retSRc);
System.out.println(jsonObject);
} catch (IOException | JSONException e) {
e.printStackTrace();
}
// Navigate to main view
getUI().getNavigator().navigateTo(LoginMainView.NAME);//
}
我在response.getEntity()上遇到问题,因为它既不是JSON也不是HttpEntity,而是org.glassfish.jersey.client.HttpUrlConnector.我的错误在哪里?
解决方法:
而不是response.getEntity(),使用response.readEntity(String.class)或response.readEntity(HttpEntity.class).
内容总结
以上是互联网集市为您收集整理的java – Jersey JSON响应为HttpUrlConnector而不是JSON全部内容,希望文章能够帮你解决java – Jersey JSON响应为HttpUrlConnector而不是JSON所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。