有3个问题。我正在使用 Java Restful Web 服务,请求是 HTTP POST
客户端如何发送 JSON 数据以及 application/x-www-form-urlencoded 的 MediaType。
使用字节数组是否可以?
如何使用在服务器端以 byte[] 格式发送的 JSON 数据以及 application/x-www-form-urlencoded 的 MediaType ?
我可以使用 Postman 客户端以字节数组格式发送 JSON 吗?
(1) Postman 会自动对 JSON 进行 url 编码。只需输入一个键,值就是 JSON。 (2) 是的,但您需要首先对字节数组进行 Base64 编码。看Java 8 的Base64.Encoder.encodeToString https://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html#encodeToString-byte:A-。如果您不使用 Java 8,您可能需要一个外部库。
-
(1) 如果您只是发送 url 编码的 JSON,并且想要验证 JSON,那么您应该使用像 Jackson 这样的库。你可以做类似的事情
@Path("/encoded")
public class EncodedResource {
@POST
@Path("/json")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response getResponse(@FormParam("json") String json)
throws Exception {
ObjectMapper mapper = new ObjectMapper();
Hello hello = mapper.readValue(json, Hello.class);
return Response.ok(hello.hello).build();
}
public static class Hello {
public String hello;
}
}
我已经用邮递员测试了这个,输入json
进入钥匙和{"hello":"world"}
进入值,并且效果很好。响应是world
(2)如果你要对其进行Base64编码,那么你需要做类似的事情
@POST
@Path("/base64")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response getResponse(@FormParam("base64") String base64)
throws Exception {
String decoded = new String(Base64.getDecoder().decode(base64));
ObjectMapper mapper = new ObjectMapper();
Hello hello = mapper.readValue(decoded, Hello.class);
return Response.ok(hello.hello).build();
}
public static class Hello {
public String hello;
}
我也用 Postman 测试过,效果很好。我用了这个代码
String json = "{\"hello\":\"world\"}";
String encoded = Base64.getEncoder().encodeToString(json.getBytes());
得到一个编码字符串(即eyJoZWxsbyI6IndvcmxkIn0=
),将其作为值并base64
作为钥匙。通过对上述方法的请求,我得到了相同的结果world
result.
我认为上面应该涵盖这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)