例如,Xml为:
<BIPType>
<BIPCode>B00001</BIPCode>
<BIPCode>B00002</BIPCode>
<ActivityCode>A00000</ActivityCode>
<ActionCode>1</ActionCode>
</BIPType>
Bean为:
@XmlRootElement(name = "BIPType")
public class BipType {
@XmlElement(name = "BIPCode")
@NotBlank
private String bipCode;
@XmlElement(name = "ActivityCode")
private String activityCode;
@XmlElement(name = "ActionCode")
private String actionCode;
}
虽然Xml中有两个BIPCode字段,但是这时候JAXB是不会报错的,依然会正常把Xml解析为实体类
BipType(bipCode=B00002, activityCode=A00000, actionCode=1)
也就是说,Xml比Bean范围大没关系?请问下是否有相关配置让JAXB在这种时候也抛出异常呢?
老实说,其实在回答这个问题之前,是没怎么玩过
JAXB
的 (゚Д゚*)ノ,也许实际我对于它的API
操作了解程度可能还没有题主高,但是我只是针对题主提出的问题结合源码去思考解决而已,因此即使我下面的答案也请题主自行核实一下首先不过大致看了一眼介绍,因为就是一个

xml
和java
互转的工具,主要类也就下面几个类和接口设计上
JAXB
非常清晰,涉及题主的问题主要应该就是Umarshaller
接口了,看了一下XML->Java
的例子而题主的需求是希望读取的
XML
时重复属性或者说多余属性能够报错,那换句话说,题主希望XML
文件中的结构需要符合一定的规则或者叫定义既然说
XML
文件的规则/定义,那我们应该可以自然而然想到XML Shema
,因为XML Shema
就是对XML
文件的结构做出定义和描述的,也就是咱们常见的xsd
文件,如果能把JAXB
和xsd
文件关联起来,校验这个问题就很简单了,因为在XML Shema
的语法中,是有一个Order
指示器的,其中的<all>
指示器,就可以完成题主的需求而从上面的简单里例子可以看到,我们要对
XML->Java
做操作,主要依赖Umarshaller
接口,因此我们顺理成章的去查看Umarshaller
接口的方法,期待找到符合需求的扩展点,众多方法中,setSchema
格外引人注目读一下方法注释,明显就是我们想要的,这里方法中的

Schema
对象应该我们需要根据我们定义的xsd
文件创建而得那我们首先先把
xsd
文件准备好,由于没有其他限制,简单就可以了,生成一个BipType.xsd
(可以随便网上搜,demo
很多,我是捡懒从idea
里直接根据java
文件快捷键生成的)接下来我们再依据
xsd
文件来创建schame
对象有了
schame
对象,我们的Unmarshaller
接口就需要再调用一次setSchema
方法这下就差不多了,最后完整代码试一下
此时执行会报错的

如果注释掉一个
<BIPCode>
,则执行成功如果题主对于
XML Schema
有其他的校验需求,可以只用简单去修改BipType.xsd
即可,具体很多用法操作,还是可以去参考w3cschool的XML Schema
部分能想到的就是这些叭,希望能帮到你,拜~(。・∀・)ノ