【发布时间】:2018-04-17 08:42:19
【问题描述】:
我正在尝试使用 MOXy 设置一个简单的 Jersey JAX-RS 应用程序以支持 JAXB JSON,并且我想自定义解组器。我做了以下事情:
@Provider
public class CustomProvider extends ConfigurableMoxyJsonProvider{
@Override
protected void preReadFrom(..., Unmarshaller unmarshaller) throws JAXBException{
super.preReadFrom(...);
System.out.println("preReadFrom entered");
unmarshaller.setEventHandler(new ValidationEventHandler(){
@Override
public boolean handleEvent(ValidationEvent event){
System.out.println("Entered handleEvent");
return false;
}
});
}
}
我为preReadFrom 编写了一个覆盖,并在解组器上设置了一个事件处理程序。当我传递一个无效的 JSON 正文时,preReadFrom 中的打印语句会执行,但不是事件处理程序中的那个。因此提供程序已正确注册,但未调用事件处理程序。
什么可能导致这个问题?
我想要实现的是当用户在 JSON 正文中传递无关的属性时,我想抛出一个错误(默认情况下,这些属性被忽略)。在各种网站上搜索,添加事件处理程序是唯一的方法。如果我也能以不同的方式实现这一点,那就太好了。
【问题讨论】:
-
为什么不在传递给
preReadFrom之前自定义Unmarshaller?为什么你需要一个全新的供应商?能否提供一些可运行的代码进行测试? -
我正在这样做。我正在自定义传递给
preReadFrom的解组器。通过自定义,如果您的意思是设置一些属性 - 我将我的意图添加到问题中。我找不到任何可以实现该意图的属性。 -
你不能访问
Unmarshaller之前它被传递给preReadFrom方法吗?它来自哪里? -
有什么特别的理由说明这会是有益的吗?我们也可以这样做吗?
-
那么您可以直接更改
Unmarshaller,而不必创建新的提供程序。preReadFrom在哪里调用?