当前位置: 首页 > 知识库问答 >
问题:

使用jackson注释,我如何为输出JSON中的field和value获得单独的JSON行?

钮高朗
2023-03-14

我正在调用一个web服务,该服务要求发送到它的数据以

{
  "data": [
    {
      "field": "Pol_OwnerName",
      "value": "Policy Owner Name Here"
    },
    {
      "field": "Pol_Number",
      "value": "123456789"
    ]
}

我正在使用POJO并使用@JSONProperty注释:

@JsonProperty("Pol_OwnerName")
private String policyOwnerName;

@JsonProperty("Pol_Number")
private String policyNumber;

这将导致输出的形式为:

{ 
     "Pol_OwnerName":"Policy Owner Name Here"
}

我如何使用jackson注释将我的值转换成所需的格式?

共有1个答案

欧阳鸿哲
2023-03-14

我认为您需要有单独的POJO来满足您的请求。您需要转换Policy类的内容以匹配所需的请求。您可以创建一个简单的WebServiceRequest类,如下所示:

public class WebServiceRequest {
    @JsonProperty("data")
    private List<WebServiceRequestDataEntry> data;

    public List<WebServiceRequestDataEntry> getData() { return data; }

    public void setData(List<WebServiceRequestDataEntry> data) { this.data = data; }
}

这将包含一个WebServiceRequestDataEntry元素的数组,如下所示:

public class WebServiceRequestDataEntry {
    @JsonProperty("field")
    private String field;
    @JsonProperty("value")
    private String value;

    public WebServiceRequestDataEntry(String field, String value) {
        this.field = field;
        this.value = value;
    }

    public String getField() { return field; }

    public void setField(String field) { this.field = field; }

    public String getValue() { return value; }

    public void setValue(String value) { this.value = value; }
}

然后可以尝试将策略类内容转换为请求负载。我假设你的课是这样的:

private static class Policy {
    private final String policyOwnerName;
    private final String policyNumber;

    public Policy(String ownerName, String number) {
        this.policyOwnerName = ownerName;
        this.policyNumber = number;
    }

    public String getPolicyOwnerName() { return this.policyOwnerName; }

    public String getPolicyNumber() { return this.policyNumber; }
}

我用这段代码对它进行了测试,它似乎能像预期的那样工作:

ObjectMapper objectMapper = new ObjectMapper();
WebServiceRequest webServiceRequest = new WebServiceRequest();

Policy[] policies = new Policy[] { new Policy("User1", "12345")};

List<WebServiceRequestDataEntry> data = new ArrayList<>();
for (Policy p : policies) {
    data.add(new WebServiceRequestDataEntry("Pol_OwnerName", p.getPolicyOwnerName()));
    data.add(new WebServiceRequestDataEntry("Pol_Number", p.getPolicyNumber()));
}
webServiceRequest.setData(data);

System.out.println(objectMapper.writeValueAsString(webServiceRequest));

这将打印以下输出:

{"data":[{"field":"Pol_OwnerName","value":"User1"},{"field":"Pol_Number","value":"12345"}]}
 类似资料:
  • 我正在我的gradle项目中使用。自从将添加到我的项目构建文件后,我在运行gradle项目时遇到了这个异常。这里是我的错误的堆栈跟踪。 我在我的类中使用了未使用的。但是我确实有和注释,它们使用两个类来序列化和反序列化我的到UTC格式的Json和从Json到Json的。我是第一次做这个序列化和反序列化,所以请给出任何建议。 这是我的分级文件代码:

  • 我正在尝试使用Spring 4实现REST服务。 该应用程序使用Java 7构建,并在Tomcat 7上运行。 REST方法将返回JSON格式的customer对象。应用程序是注释驱动的。 Customer类有JAXB注释。Jackson罐子出现在课堂路径中。据我所知,Jackson将使用JAXB注释生成JSON。 客户类别: 我已经将REST服务类注释为@RestController(根据Spr

  • 我正在尝试从Spring Boot应用程序的表单中获取用户输入。我需要做什么? 我实现了一个登录控制器使用注释来请求数据进行验证,但得到参数不存在的结果。 Login.html 我希望用户的电子邮件和密码才能登录,但得到 2019-07-27 20:30:54.393 WARN 2900---[nio-8080-exec-2].w.s.m.s.DefaultHandlerExceptionReso

  • 如何使用杰克逊序列化此类 Jackson没有拾取@XmlElementWrapper@XmlSee还有注释,Jackson也没有映射@XmlRootElement注释。我使用的是Jackson 1.9.0。Jackson正在将元素放入列表中,但没有映射POJO类的根元素。 这里是示例方法。 它生成的响应是'{“response”:{“status”:0,“PBBeans”:[{“user_name

  • 问题内容: 我从API获得以下JSON: 我正在使用Jackson库将此JSON反序列化为Java对象。我不想为对象创建一个特殊的类。我只是想以纯文本形式获得它。这样。 在我的POJO中,这应该作为字符串,即: 是否可以将JSON的此部分作为纯文本获取? 编辑: 我得到的错误 问题答案: 利用。 只需在POJO中为该字段输入以下内容,它便会为您工作。 凡如下: 给出以下输出:

  • 问题内容: 我正在尝试使用Jackson JSON接受一个字符串,并确定它是否为有效JSON。谁能建议要使用的代码示例(Java)? 问题答案: 不知道您的用例是什么,但是应该这样做: