关于使用JAXB读取xml文档转换为java对象出现非法注解异常

简介: 关于使用JAXB读取xml文档转换为java对象出现非法注解异常

java类如下:

import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
//该注解表示xml文档的根元素
@XmlRootElement
public class Book implements Serializable {
  private static final long serialVersionUID = 2791336442194888575L;
  // 该注解代表xml文档的element
  @XmlElement
  private Integer id;
  @XmlElement
  private String name;
  @XmlElement
  private String author;
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getAuthor() {
    return author;
  }
  public void setAuthor(String author) {
    this.author = author;
  }
  @Override
  public String toString() {
    return "Book [id=" + id + ", name=" + name + ", author=" + author + "]";
  }
}

错误如下:

Class has two properties of the same name "author"
this problem is related to the following location:
at public java.lang.String com.yc.bean.Book.getAuthor()
at com.yc.bean.Book
this problem is related to the following location:
at private java.lang.String com.yc.bean.Book.author
at com.yc.bean.Book
Class has two properties of the same name "id"
this problem is related to the following location:
at public java.lang.Integer com.yc.bean.Book.getId()
at com.yc.bean.Book
this problem is related to the following location:
at private java.lang.Integer com.yc.bean.Book.id
at com.yc.bean.Book
Class has two properties of the same name "name"
this problem is related to the following location:
at public java.lang.String com.yc.bean.Book.getName()
at com.yc.bean.Book
this problem is related to the following location:
at private java.lang.String com.yc.bean.Book.name
at com.yc.bean.Book

原因:类中有两个相同的属性名,说明会同时访问getter方法和成员变量

解决办法:

1、在类上加上@XmlAccessorType(XmlAccessType.FIELD)注解,加上此注解那么xml的访问类型为成员变量,而不是getter/setter方法对。

1.png

注明:该注解每个非静态,非瞬时成员变量将会被自动绑定到xml文档中,除非标@XmlTransient注解。getter/setter方法只有明确标有JAXB注解才会被绑定。


2、不加@XmlAccessorType(XmlAccessType.FIELD)注解,将@XmlElement注解加到setter或者getter方法上,因为默认的访问类型为getter/setter方法对。

2.png

3.png

注明:每个public访问权限的getter/sette方法对和公有成员变量才会自动绑定,访问权限为private,protected和缺省访问权限的getter/setter方法对只有明确标有才会自动绑定。

相关文章
|
8天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
8天前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
|
21天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
9天前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
|
10天前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
|
13天前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
14 1
|
17天前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
47 5
|
15天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
32 2
|
22天前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
|
17天前
|
Java 编译器
Java进阶之标准注解
Java进阶之标准注解
28 0