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이 지원하는 다섯가지 전략이 있습니다 :
-
LOWER_CAMEL_CASE
-
LOWER_CASE
-
SNAKE_CASE
-
UPPER_CAMEL_CASE
-
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. 참조
'Backend > Spring' 카테고리의 다른 글
[Spring Boot] Pagination과 Sort (0) | 2019.07.11 |
---|