gpt4 book ai didi

java - 在 Web 服务中使用 JSON 字节数组以及 application/x-www-form-urlencoded

转载 作者:行者123 更新时间:2023-12-01 12:01:37 24 4
gpt4 key购买 nike

有 3 个问题。我正在使用 Java Restful Web 服务,请求是 HTTP POST

  1. 客户端如何发送 JSON 数据以及 application/x-www-form-urlencoded 的 MediaType。是否可以使用字节数组?

  2. 如何使用服务器端以 byte[] 格式发送的 JSON 数据以及 application/x-www-form-urlencoded 的 MediaType?

  3. 我可以使用 Postman 客户端以字节数组格式发送 JSON 吗?

最佳答案

  1. (1) Postman 会自动对 JSON 进行 url 编码。只需输入一个键,值就是 JSON。 (2) 是的,但您需要首先对字节数组进行 Base64 编码。请参阅Java 8's Base64.Encoder.encodeToString 。如果您不使用 Java 8,您可能需要一个外部库。

  2. (1) 如果您只是发送 url 编码的 JSON,并且想要对 JSON 进行 POJOify,那么您应该使用像 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;
    }
    }

    我已经使用 Postman 对此进行了测试,在键中输入 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 结果。

  3. 我认为这应该在上面介绍。

关于java - 在 Web 服务中使用 JSON 字节数组以及 application/x-www-form-urlencoded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27947830/

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