Spring boot jersey jackson

I have a Jackson configuration related question in my Spring boot project

As described in the spring boot blog

I am trying to set up serialization of objects.

After adding a new bean configuration in my configuration

@Bean public Jackson2ObjectMapperBuilder jacksonBuilder() { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); builder.propertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); return builder; } 

When I try to infer an instance of my User class, the json result is not in CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES

 Class User { private String firstName = "Joe Blow"; public String getFirstName() { return firstName; } } 

Json output:

 { "firstName": "Joe Blow" } 

but not

 { "first_name": "Joe Blow" } 

Maybe I need to register something in my jersey configuration in order to activate my own obejctMapper configuration

 @Configuration public class JerseyConfig extends ResourceConfig { public JerseyConfig() { packages("my.package); } } 

thanks

+6
source share
1 answer

The general way to configure ObjectMapper applications for JAX-RS / Jersey is ContextResolver . for instance

 @Provider public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> { private final ObjectMapper mapper; public ObjectMapperContextResolver() { mapper = new ObjectMapper(); mapper.setPropertyNamingStrategy( PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES ); } @Override public ObjectMapper getContext(Class<?> type) { return mapper; } } 

It must be raised by scanning the package, or you can explicitly register it if it is not in the package area.

 public JerseyConfig() { register(new ObjectMapperContextResolver()); // Or if there is an injection required // register it as a .class instead of instance } 

ContextResolver is called during marshalling and disassembly. The serial or deserialized class / type will be passed to the getContext method. Thus, you can even use more than one cartographer for different types or even more use cases.


UPDATE

Starting with Spring Boot 1.4, you can simply create an ObjectMapper Spring bean, and Spring Boot will create a ContextResolver for you and use ObjectMapper

 // in your `@Configuration` file. @Bean public ObjectMapper mapper() {} 
+10
source

All Articles