jackson-databind: `SNAKE_CASE` doesn't work when using Lombok's `@AllArgsConstructor`

SNAKE_CASE doesn’t work when using Lombok’s @AllArgsConstructor in 1.7.3 but it (CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES) works regardless of using @AllArgsConstructor in 1.6.5.

This is a sample test to show the problem:

public class ObjectMapperLombokAllArgsConstructorTests {

    @Test
    public void test() throws JsonProcessingException {
        LombokAllArgsConstructorDomain lombokDomain = new LombokAllArgsConstructorDomain();
        lombokDomain.setSomeProperty("test");
        String lombokJson = new ObjectMapper()
                .setPropertyNamingStrategy(
                        PropertyNamingStrategy.SNAKE_CASE)
                .writeValueAsString(lombokDomain);
        System.out.println(lombokJson);

        ManualAllArgsConstructorDomain manualDomain = new ManualAllArgsConstructorDomain();
        manualDomain.setSomeProperty("test");
        String manualJson = new ObjectMapper()
                .setPropertyNamingStrategy(
                        PropertyNamingStrategy.SNAKE_CASE)
                .writeValueAsString(manualDomain);
        System.out.println(manualJson);

        String workaroundAppliedLombokJson = new ObjectMapper()
                .enable(MapperFeature.ALLOW_EXPLICIT_PROPERTY_RENAMING)
                .setPropertyNamingStrategy(
                        PropertyNamingStrategy.SNAKE_CASE)
                .writeValueAsString(lombokDomain);
        System.out.println(workaroundAppliedLombokJson);
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    static class LombokAllArgsConstructorDomain {

        private String someProperty;

    }

    @Data
    @NoArgsConstructor
    static class ManualAllArgsConstructorDomain {

        private String someProperty;

        public ManualAllArgsConstructorDomain(String someProperty) {
            this.someProperty = someProperty;
        }

    }

}

You can also find it in the following location to test immediately: https://github.com/izeye/samples-java-branches/blob/master/src/test/java/learningtest/com/fasterxml/jackson/databind/ObjectMapperLombokAllArgsConstructorTests.java

This was originally reported at: https://github.com/spring-projects/spring-boot/issues/5687

About this issue

  • Original URL
  • State: closed
  • Created 8 years ago
  • Comments: 18 (9 by maintainers)

Commits related to this issue

Most upvoted comments

I also confirmed that it works, since I was one of the people who pushed for @ConstructorProperties support. Sorry for the hassle 😅 Keep up the good work.