关于使用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方法对只有明确标有才会自动绑定。

相关文章
|
1月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
67 1
|
21天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
59 7
|
1月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
76 12
|
1月前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
39 1
|
1月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
141 5
|
27天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
66 5
|
1月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
1月前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
78 7
|
1月前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
82 6
|
1月前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
68 1