Estaba tratando de @Autowire
un servicio administrado por Spring en mi Deserializer
. Alguien me avisó a Jackson usando el operador new
al invocar los serializadores/deserializadores. Esto significa que no hay auto-cableado de la instancia de Jackson de mi Deserializer
. Así es como yo era capaz de @Autowire
mi clase de servicio en mi Deserializer
:
context.xml
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper" />
</bean>
</mvc:message-converters>
</mvc>
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<!-- Add deserializers that require autowiring -->
<property name="deserializersByType">
<map key-type="java.lang.Class">
<entry key="com.acme.Anchor">
<bean class="com.acme.AnchorDeserializer" />
</entry>
</map>
</property>
</bean>
Ahora que mi Deserializer
es una fábrica de frijol de primavera gestionados, auto-cableado!
AnchorDeserializer.java
public class AnchorDeserializer extends JsonDeserializer<Anchor> {
@Autowired
private AnchorService anchorService;
public Anchor deserialize(JsonParser parser, DeserializationContext context)
throws IOException, JsonProcessingException {
// Do stuff
}
}
AnchorService.java
@Service
public class AnchorService {}
actualización: Si bien mi respuesta original que funcionó para mí volver cuando escribí esto, @xi La respuesta de .lin es exactamente lo que se necesita. Buen hallazgo!
Para aclarar, ¿cómo ha de determinarse si un tratamiento personalizado se va a utilizar: por nombre del campo (eficacia), o por ¿Tipo de campo? –
Disculpe, no vi este comentario @ProgrammerBruce ... Creo que, por tipo de campo ... – gc5