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

JAXB Java生成XML,为什么要小写?

谷梁建中
2023-03-14
问题内容

当我运行此代码时:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

public class JavaToXMLDemo {
  public static void main(String[] args) throws Exception {
    JAXBContext context = JAXBContext.newInstance(Employee.class);

    Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

    Employee object = new Employee();
    object.setCode("CA");
    object.setName("Cath");
    object.setSalary(300);

    m.marshal(object, System.out);

  }
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Employee {
  private String code;

  private String name;

  private int salary;

  public String getCode() {
    return code;
  }

  public void setCode(String code) {
    this.code = code;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getSalary() {
    return salary;
  }

  public void setSalary(int population) {
    this.salary = population;
  }
}

我懂了

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
    <code>CA</code>
    <name>Cath</name>
    <salary>300</salary>
</employee>

哪个是正确的,所以我的问题是为什么它将雇员改为雇员?是否可以用大写E代替雇员打印?

这是我真正想要的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Employee>
    <code>CA</code>
    <name>Cath</name>
    <salary>300</salary>
</Employee>

谢谢!


问题答案:

您看到的行为是标准 JAXB(JSR-222)
XML名称到Java名称转换算法的结果。

您可以使用@XmlRootElement注释指定名称:

@XmlRootElement(name="Employee")
@XmlAccessorType(XmlAccessType.FIELD)
class Employee {
    ...
}

我是 EclipseLink JAXB(MOXy)的
负责人,并且我们有一个扩展名,它使您可以覆盖您可能感兴趣的默认名称转换算法:

  • http://blog.bdoughan.com/2011/05/overriding-jaxbs-name-mangling.html


 类似资料:
  • 问题内容: 实际上,这完全是理论上的问题。但是有趣的是,为什么Java规范不允许在包中使用大写字母,并导致这样写: 代替 问题答案: 直接从Oracle Docs 包名称以小写形式编写,以避免与类或接口的名称冲突。

  • 问题内容: Lambda转换是一个两步过程, 一个是 :将lambda分解为同一类中的静态方法。 [ private static void Main.lambda $ main $ 0() ,public static void Main.main(java.lang.String [])] 二 :生成实现功能接口的类。 已生成一个类:类Main $$ Lambda $ 1/149928006

  • Lambda转换是一个两步的过程,第一步:将Lambda解聚为同一个类中的静态方法。

  • 问题内容: 这适用于Applet,Servlet,Midlet等的子类。 为什么他们不需要?如果我想创建一个从或类似的类开始,那是不好的设计,还是我将如何去做? 问题答案: 它实际上是好的设计,但并不明显,您想要执行的操作没有效果,因此有点反常。 这些类型的应用程序生活在容器中,因此,它们的切入点由这些容器必须遵守的标准确定。这些标准的设计者选择不将入口点称为主要入口点。您可以将功能放在重写的方法

  • 本文向大家介绍为什么要用 redis ?为什么要用缓存?相关面试题,主要包含被问及为什么要用 redis ?为什么要用缓存?时的应答技巧和注意事项,需要的朋友参考一下 主要从“高性能”和“高并发”这两点来看待这个问题。 高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓

  • 我们都喜欢 Rust 允许我们编写快速,安全的软件。但是为什么要编写异步代码呢? 异步代码允许我们在同一 OS 线程上,同时运行多个任务。在典型的线程应用程序中,如果您想同时下载两个不同的网页,则需要将工作分散到两个不同的线程中,如下所示: fn get_two_sites() { // Spawn two threads to do work. let thread_one = thre