Backend/Spring

Spring Jackson 프로퍼티 Naming Strategy

에반황 2019. 11. 26. 14:52

1. 개요

Jackson은 Java Object를 Json으로 변환하는 가장 유명한 라이브러리입니다. POJO를 JSON으로 바꾸는 동안 프로퍼티명은 키로서 사용됩니다. 하지만 때때로 우리는 프로퍼티명을 다른 방식으로 사용하고 싶을 때가 있죠. Jackson은 이를 위해 여러가지 네이밍 전략을 제공하고 있습니다.
(SnakeCaseStrategy,  PascalCaseStrategy,  LowerCaseStrategy,  KebabCaseStrategy)

 

EmployeeController.java

spring boot 어플리케이션에 Employee라는 POJO를 응답으로 반환하는 RestController를 만들어봅시다. 응답은 자동으로 Jackson의 기본 네이밍 전략에 의해 JSON 형식으로 날아갈 겁니다.

@RestController
public class EmployeeController {
    @GetMapping("/getEmployee")
    public Employee getEmployees() {
        Employee employee=new Employee();
        employee.setEmployeeId(19);
        employee.setEmployeeName("Harry");
        employee.setEmployeeRole("DEVELOPER");
        return employee;
    }
}

 

Employee.java

Employee라는 프로퍼티명이 CamelCase인 POJO 객체를 만듭니다.

public class Employee {

    private int employeeId;
    private String employeeName;
    private String employeeRole;

    public int getEmployeeId() { return employeeId; }

    public void setEmployeeId(int employeeId) { this.employeeId = employeeId;}

    public String getEmployeeRole() { return employeeRole; }

    public void setEmployeeRole(String employeeRole) { this.employeeRole = employeeRole; }

    public String getEmployeeName() { return employeeName; }

    public void setEmployeeName(String employeeName) { this.employeeName = employeeName; }
}

 

2. Spring Jackson 프로퍼티 네이밍 전략

spring boot 어플리케이션은 application.properties 또는 application.yml 내에 있는 spring.jackson.property-naming-strategy 설정하고

spirng boot 어플리케이션이 아니거나 spring MVC 어플리케이션이라면 Jackson2ObjectMapperBuilder 를 빈으로 등록하고 네이밍 전략과 관련 있는 configuration을 정의합니다.

 

하단에 Jackson이 지원하는 다섯가지 전략이 있습니다 :

  1. LOWER_CAMEL_CASE

  2. LOWER_CASE

  3. SNAKE_CASE

  4. UPPER_CAMEL_CASE

  5. KEBAB_CASE

EmployeeContollerTest.java

이를 테스트하는 간단한 테스트를 만들어 확인해 봅시다. 해당 테스트를 생략하고 하단의 결과만 보셔도 무방합니다.

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
class EmployeeControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void get_employees() throws Exception {
        mockMvc.perform(get("/getEmployee"))
                .andDo(print())
                .andExpect(status().isOk());
    }
}

 

1. LowerCamelCase

application.properties

spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE

또는

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

결과:

{
    "employeeId": 19,
    "employeeName": "Harry",
    "employeeRole": "DEVELOPER"
}

 

2. LowerCaseStrategy

application.properties

spring.jackson.property-naming-strategy=LOWER_CASE

또는

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

결과:

  {
    "employeeid": 19,
    "employeename": "Harry",
    "employeerole": "DEVELOPER"
  }

 

3. SnakeCaseStrategy

application.properties

spring.jackson.property-naming-strategy=SNAKE_CASE

또는

If we do not have application.properties file than create a bean with following configurations.

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

결과:

{
  "employee_id": 19,
  "employee_name": "Harry",
  "employee_role": "DEVELOPER"
}

 

4. UpperCamelCaseStrategy

application.properties

spring.jackson.property-naming-strategy=UPPER_CAMEL_CASE

또는

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

결과:

{
  "EmployeeId": 19,
  "EmployeeName": "Harry",
  "EmployeeRole": "DEVELOPER"
}

 

5. KebabCaseStrategy

application.properties

spring.jackson.property-naming-strategy=KEBAB_CASE

또는

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

결과:

{
  "employee-id": 19,
  "employee-name": "Harry",
  "employee-role": "DEVELOPER"
}

 

3. 결론

이 포스트에서 우리는 자바 오브젝트를 JSON으로 변환하여 응답으로 전달할 때 프로퍼티명을 다양한 네이밍 규칙을 통해 바꾸어 보았습니다. application.properties 또는 Jackson2ObjectMapperBuilder 빈을 통해서 설정하는 방법도 다뤘습니다.

 

4. 참조

반응형