sgo*_*erg 22 java post json jersey jackson
我用Jersey/Jackson创建了一个休息api,效果很好.我想调整我的POST方法以接收除了作为JSON接收的POJO之外的字符串标记.我调整了我的一个方法,如下:
@POST
@Path("/user")
@Consumes(MediaType.APPLICATION_JSON)
public Response createObject(User o, String token) {
System.out.println("token: " + token);
String password = Tools.encryptPassword(o.getPassword());
o.setPassword(password);
String response = DAL.upsert(o);
return Response.status(201).entity(response).build();
}
Run Code Online (Sandbox Code Playgroud)
我想调用该方法,但无论出于何种原因,无论我尝试什么,令牌都会打印为null.这是我写的发送帖子请求的客户端代码:
public String update() {
try {
com.sun.jersey.api.client.Client daclient = com.sun.jersey.api.client.Client
.create();
WebResource webResource = daclient
.resource("http://localhost:8080/PhizzleAPI/rest/post/user");
User c = new User(id, client, permission, reseller, type, username,
password, name, email, active, createddate,
lastmodifieddate, token, tokentimestamp);
JSONObject j = new JSONObject(c);
ObjectMapper mapper = new ObjectMapper();
String request = mapper.writeValueAsString(c) + "&{''token'':,''"
+ "dog" + "''}";
System.out.println("request:" + request);
ClientResponse response = webResource.type("application/json")
.post(ClientResponse.class, request);
if (response.getStatus() != 201) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
System.out.println("Output from Server .... \n");
String output = response.getEntity(String.class);
setId(UUID.fromString(output));
System.out.println("output:" + output);
return "" + output;
} catch (UniformInterfaceException e) {
return "failue: " + e.getMessage();
} catch (ClientHandlerException e) {
return "failue: " + e.getMessage();
} catch (Exception e) {
return "failure: " + e.getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
Per*_*ion 39
这不是JAX-RS的工作方式.POST请求的主体将被封送到带注释的资源方法的第一个参数(在这种情况下,进入User参数).你有两个选择来解决这个问题:
@QueryParam.@HeaderParam.示例 - 选项1
class UserTokenContainer implements Serializable {
private User user;
private String token;
// Constructors, getters/setters
}
Run Code Online (Sandbox Code Playgroud)
示例 - 选项2
客户:
WebResource webResource = client.
resource("http://localhost:8080/PhizzleAPI/rest/post/user?token=mytoken");
Run Code Online (Sandbox Code Playgroud)
服务器:
@POST
Path("/user")
@Consumes(MediaType.APPLICATION_JSON)
public Response createObject(@QueryParam("token") String token, User o) {
System.out.println("token: " + token);
// ...
}
Run Code Online (Sandbox Code Playgroud)
示例 - 选项3
客户:
ClientResponse response = webResource
.type("application/json")
.header("Token", token)
.post(ClientResponse.class, request);
Run Code Online (Sandbox Code Playgroud)
服务器:
@POST
Path("/user")
@Consumes(MediaType.APPLICATION_JSON)
public Response createObject(@HeaderParam("token") String token, User o) {
System.out.println("token: " + token);
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65018 次 |
| 最近记录: |