Java Struts2仅针对特定类型引发类型转换错误

Java Struts2仅针对特定类型引发类型转换错误,java,struts2,Java,Struts2,我们的应用程序中注册了一个自定义类型转换器,比如说footypecoverter,它负责转换类型Foo。我们对其他类型的类型转换错误不感兴趣,但如果目标类型Foo的类型转换失败,我们希望引发验证错误。我们对String=>Foo和Foo=>String 我知道这可以通过ConversionErrorFieldValidator实现,但这意味着要装饰目标字段。我们有没有办法通过一些全局设置来实现这一点 谢谢并致以最良好的祝愿, Asa简而言之:替换默认的“conversionError”拦截器,并

我们的应用程序中注册了一个自定义类型转换器,比如说
footypecoverter
,它负责转换类型
Foo
。我们对其他类型的类型转换错误不感兴趣,但如果目标类型
Foo
的类型转换失败,我们希望引发验证错误。我们对
String
=>
Foo
Foo
=>
String

我知道这可以通过
ConversionErrorFieldValidator
实现,但这意味着要装饰目标字段。我们有没有办法通过一些全局设置来实现这一点

谢谢并致以最良好的祝愿,
Asa

简而言之:替换默认的
“conversionError”
拦截器,并将其替换为覆盖
shouldAddError的版本,该版本在值的类型为
Foo
时返回
true

详细信息:默认拦截器是XWork的
ConversionErrorInterceptor
的扩展,主要检查值。它还检查特定类型的钩子,所以我认为这是最干净的钩子。如果值类型是您感兴趣的值类型,则重写
shouldAddError
并返回
true

大致:

protected boolean shouldAddError(String propertyName, Object value) {
    return value instanceOf Foo;
}

您可能希望保留一些值检查,因此请仔细检查。调用
super可能是最简单的方法。首先应该添加错误
,如果它返回
true

则进行检查。您可以按字段检查它,甚至可以检查@umeshawashi,如果可能的话,这正是我想要避免的。必须根据每个字段设置转换错误字段验证器。我想做的是进行某种全局设置,因此所有目标类型FOO的转换错误都会被引发。在这种情况下,我担心Struts2提供了错误处理机制作为一种通用机制开发,也许你需要通过某种定制的拦截器来满足这一需求。也许有人更清楚这是否可行,或者每个案例的答案。这将捕获Foo=>String转换错误,但是String=>Foo呢?(对不起,也许我的问题不够清楚。我会更新的)@Asa不确定,我得玩一玩,看看到底发生了什么。在任何情况下,AFAICT,自定义拦截器是唯一真正的解决方案,无论是基于名称还是类型,或者您需要添加一些额外的信息来帮助识别您特别感兴趣的错误。我采用了这种方法,并从
FooTypeConverter
中向上下文添加了额外的信息,我在新的自定义拦截器中使用了该信息来确定是否引发错误。由于属性名在类型转换器中不可用,我使用键
XWorkConverter.CONVERSION\u property\u FULLNAME
从上下文中获取相同的属性名。再次感谢你的帮助,戴夫。@Asa啊,有趣——酷。我将对此进行研究,看看是否有一种很好的方法可以使此功能通用或可注入,尽管我认为这是一种非常合适的方法。很高兴你解决了这个问题。是的,如果能以更好的方式完成这项工作会很酷,因为IMHO,向上下文添加额外的信息不应该是类型转换器的责任。无论如何,正如你所说,这是一个利基案例,我有一个有效的解决方案:)