【问题标题】:Jersey request body needs to be well formattedJersey 请求正文需要正确格式化
【发布时间】:2021-12-06 14:43:52
【问题描述】:

我有一个要求,我的消费者需要请求具有格式正确的请求正文。

我正在使用Jersey Client,下面是代码sn-p:

SomeRequestObject vSomeRequestObject = getObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).readValue(messageBody,
                            SomeRequestObject.class);

return restClient.target(urlMap.get("uri")).path(urlMap.get("path")).request(MediaType.APPLICATION_JSON)
                .headers(vRequestHeaders).post(Entity.entity(vSomeRequestObject, MediaType.APPLICATION_JSON));
            
            

但不知何故,请求仍然是这样的:

{"someKey1":"SomeValue1","someKey2":"SomeValue2"}

应该像下面这样

{
    "someKey1": "SomeValue1",
    "someKey2": "SomeValue2"
}

请建议是否有任何杰克逊注释。

【问题讨论】:

    标签: java jackson jersey-client


    【解决方案1】:

    你必须美化你的输出。 Jackson 可以使用 writerWithDefaultPrettyPrinter() 方法来做到这一点。 下面这个例子可能会有所帮助:

    ObjectMapper objectMapper = new ObjectMapper();
    SomeRequestObject object = SomeRequestObject.create();
    String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
    System.out.println(json);
    

    此链接可以帮助您了解更多详情:https://www.tutorialspoint.com/pretty-print-json-using-jackson-library-in-java

    【讨论】:

    • 不,我不必美化输出,要求是美化 http 调用的输入。被调用,第三方需要它。在请求中设置对象的方式是全单词包装,没有空格。
    • 你可以在一个临时变量中美化你的json,然后发送它。在您的情况下,您将其存储为String。只是要提一点;您的第三方不必强迫您向他们发送美化 jsonjson 记录的目的不是很漂亮,它必须是有效的 json。美化json 仅用于阅读或显示在客户端(UI、Web 等...)
    • 我认为你的想法是正确的,替代方法可以使用字符串方法操作原始 json,但它似乎更复杂。
    • Jackson library 为您完成大部分工作。你真的不需要操纵你的json更多。
    猜你喜欢
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2012-03-20
    • 2016-07-24
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多