我正在使用 Spring 3.2 M1 和 Hibernate 3。
我正在使用格式化程序将 POJO(恰好是 Hibernate 映射实体)格式化为它们的字符串表示形式。这非常方便,因为它允许我将字符串值绑定到对象。xml中的配置是:
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<bean class="aa.XFormatter" />
<bean class="aa.YFormatter" />
<bean class="bb.ZFormatter" />
</set>
</property>
<property name="formatterRegistrars">
<set>
<bean class="aa.DateFormatterRegistrar" />
</set>
</property>
</bean>
一切工作正常,直到我需要添加一个自定义对象映射器(HibernateAwareObjectMapper 使用jackson-module-hibernate)来摆脱来自后端的 jsonifiying 响应时休眠 POJO 的延迟加载问题。我在上面的代码中添加了这个:
<mvc:annotation-driven conversion-service="conversionService">
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="cc.HibernateAwareObjectMapper"></bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
这具有修复延迟加载问题的效果。但是在调用格式化程序时出现了一个新错误(将字符串绑定到前的日期时):
org.springframework.context.NoSuchMessageException: No message found under code 'fieldOfX.depended' for locale 'en_US'.
at org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:161)...
fieldOfX 是一个 Date 类型的字段,在添加自定义对象映射器之前,该字段已从其字符串表示形式完美格式化为其日期/对象表示形式。我很想知道depended代表什么。
对我来说另一件奇怪的事情是从对象到字符串的格式化似乎工作得很好。
据我了解,格式化程序只是特殊的转换器。消息转换器只是另一种转换器。但我开始感觉到我在这个问题上错了。
那么我在做什么/理解错误?欢迎任何帮助。