본문 바로가기
spring

[SpringBoot] Jackson JsonAlias 설정 및 x-www-form-urlencoded 문제 해결

by moonsiri 2020. 10. 31.
728x90
반응형

JsonAlias를 사용하기위해 pom.xml에 Jackson lib를 추가합니다.

 

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.9</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.9</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.9</version>
        </dependency>

 

 

@JsonAlias 사용법

@Data
public class UserVO {
    @JsonAlias(value = {"name", "userNm", "userName"}
    private String name;
}

 

 

만약 Content-Type이 application/x-www-form-urlencoded 이라면 JSON이 아니기 때문에 Jackson을 사용하지 않아 값을 받을 수 없습니다.

이런 문제를 다음과 같이 해결할 수 있습니다.

 

@Data
public class UserVO {
    @JsonAlias(value = {"name", "userNm", "userName"}
    private String name;

    //Setters for application/x-www-form-urlencoded
    public void setUserNm(String userNm) {
        this.name = userNm;
    }
    public void setUserName(String userName) {
        this.name = userName;
    }
}

혹은 request를 map으로 받아서 사용하면됩니다.

728x90
반응형

댓글