当前位置: 首页 > 面试题库 >

如何使用JAXB参考实现将JAXB对象序列化为JSON?

刁瀚昂
2023-03-14
问题内容

我正在研究的项目使用JAXB参考实现,即类来自com.sun.xml.bind.v2.*软件包。

我有一堂课User

package com.example;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "user")
public class User {
    private String email;
    private String password;

    public User() {
    }

    public User(String email, String password) {
        this.email = email;
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

我想使用JAXB编组器来获取User对象的JSON表示形式:

@Test
public void serializeObjectToJson() throws JsonProcessingException, JAXBException {
    User user = new User("user@example.com", "mySecret");
    JAXBContext jaxbContext = JAXBContext.newInstance(User.class);

    Marshaller marshaller = jaxbContext.createMarshaller();

    StringWriter sw = new StringWriter();
    marshaller.marshal(user, sw);

    assertEquals( "{\"email\":\"user@example.com\", \"password\":\"mySecret\"}", sw.toString() );
}

封送处理的数据为XML格式,而不是JSON格式。如何指示 JAXB参考实现 输出JSON?


问题答案:

JAXB参考实现不支持JSON,您需要添加一个包,例如Jackson或Moxy

莫西

 //import org.eclipse.persistence.jaxb.JAXBContextProperties;

 Map<String, Object> properties = new HashMap<String, Object>(2);
 properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
 properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);
 JAXBContext jc = JAXBContext.newInstance(new Class[] {User.class}, properties);

 Marshaller marshaller = jc.createMarshaller();
 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
 marshaller.marshal(user, System.out);

杰克逊

//import org.codehaus.jackson.map.AnnotationIntrospector;
//import org.codehaus.jackson.map.ObjectMapper;
//import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;

ObjectMapper mapper = new ObjectMapper();  
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(mapper.getTypeFactory());
mapper.setAnnotationIntrospector(introspector);

String result = mapper.writeValueAsString(user);

在这里查看示例



 类似资料:
  • 问题内容: 我有一个问题。我想使用JAXB将一个对象转换为另一个对象。就像在中,我有一个class 和另一个class ,它们都有相同的参数,实际上都是相同的(复制粘贴),但是包不同。我想使用进行它们之间的转换。 怎么做,请帮帮我。 问题答案: 您可以执行以下操作。 注意: 不需要利用JAXBSource将数据具体化为XML。 它在对象模型上不需要任何注释。 com.home.Student co

  • 问题内容: 我正在使用Jersey为服务器组件创建REST Web服务。 我要在列表中序列化的带有JAXB注释的对象如下所示: 我有一个REST资源来检索一个看起来像这样的发行版: 我还有一个REST资源来检索所有发行版的列表,如下所示: 我使用ContextResolver自定义JAXB序列化,当前配置如下: REST资源和上下文解析器都可以使用。这是第一个输出的示例: 这正是我想要的。这是列表

  • 问题内容: 我想在REST应用程序中接受和响应JSON对象。我需要发送和接收的数据在.properties文件中。我已经阅读了它们,现在位于Object(From )中。是否可以在不实现新类的情况下编组和解组对象? 我在Weblogic服务器中使用Jax-rs API。 问题答案: 对WebLogic不太熟悉,因此我不知道它使用的是哪个版本的Jersey(1.x或2.x),但是使用1.x,您可以简

  • 问题内容: 在我的数据模型中,我可以达到以下目的: 我已经可以序列化了,但是我需要序列化。本质上,我需要的是这样的: 有没有办法在JAXB批注中执行此操作而不修改我的模型? 问题答案: 您可以在此用例中使用: 该登记在使用类注释: 走得更远 除了创建新的实例外,我们还可以使用从数据库查询相应的实例。我们将更改为如下所示: 现在设置的情况下我们的,我们可以做到以下几点:

  • 问题内容: 我正在尝试使用JAXB将A序列化为XML。我是Java的新手(来自C#),所以对此任务感到困惑。 我已经看到以下代码: 像这样被调用:,但是是错误的(我已经知道)。 Java专家可以告诉我如何调用此代码吗?提出一个更简单的实现(当然还有一个调用示例)也是最受欢迎的。 谢谢。 问题答案: 您将需要创建一个包装器类以保留: 然后,您可以执行以下操作: 这将产生以下输出: 注意事项 是线程安

  • 注意: 我不需要创建java对象,因为我只需要检查一些值,但我没有找到任何东西来取消将它们作为通用对象或树或任何东西。像杰克逊的 JsonNode。如果可能的话,让我知道,这样我就可以避免所有这些混乱的对象来映射一切。 现在的问题是: 我不得不解组一个简单的xml,但是结果总是空的。我已经尝试了不同的注释,但是如果它们没有失败,结果就是null。 这似乎是这个问题的相同情况,但使用相同的注释是行不