0

バインディングでの typeMismatch Exceptions の解決に問題があります。タイプの不一致エラーが、messages.properties から解決されません。

私のコントローラーハンドラー:

@RequestMapping(method = RequestMethod.POST)
public @ResponseBody
    ValidationResponse addOrder(@ModelAttribute(value = PARAM_NAME) @Valid Orders orders, BindingResult bindingResult) {
    ...
}

bindingResult からこのメッセージを取得します。

春の設定:

...
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="/WEB-INF/messages" />
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

<bean name="validator"
      class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource">
        <ref bean="messageSource"/>
    </property>
</bean>
...

/WEB-INF/messages.properties:

...
Orders.width.NotNull=Null error
Orders.height.NotNull=Null error
typeMismatch.java.util.Date=Format error
typeMismatch.java.lang.Integer=Format error
typeMismatch.java.lang.Long=Format error
java.lang.NumberFormatException=Format error
typeMismatch.java.lang.NumberFormatException=Format error
typeMismatch.java.lang.NumberFormat=Format error
typeMismatch.orderAdd.width=Format error
typeMismatch=Format error
...

このようなチェックの場合:

...
@NotNull(message="{Orders.width.NotNull}")
private Long width;
...

正しいメッセージを受け取りました。

アップデート

この例では、エラー メッセージが出力されます。

List<FieldError> allErrors = bindingResult.getFieldErrors();
  for (FieldError objectError : allErrors) {
    System.out.println(objectError.getDefaultMessage());
}
4

1 に答える 1

2

この質問で解決策を見つけました。メッセージを翻訳messageSourceするには、次のコードを挿入して使用する必要があります。

messageSource.getMessage(objectError, locale)

これは、プロパティ ファイルからメッセージを取得します。

于 2012-11-12T23:32:15.140 に答える