[Web] REST-API(2) POST 설명&예제

728x90

package com.example.mvc.controller.post

import com.example.mvc.model.http.UserRequest
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/api")
class PostApiController {

    //현대 방식
    @PostMapping("/post-mapping")
    fun postMapping(): String {
        return "post-mapping"
    }

    //과거 방식
    @RequestMapping(method = [RequestMethod.POST], path = ["request-mapping"]) // 주소 외부 노출, url 받는 형식 다르면 같아도 충돌 안남
    fun requestMapping(): String {
        return "request-mapping"
    }

    //object mapper
    //json -> object
    //object -> json
    @PostMapping("/post-mapping/object")
    fun postMappingObject(@RequestBody userRequest: UserRequest): UserRequest {
        //json -> object
        println(userRequest)

        //UserRequest(name=Steve, age=10, email=steve@gmail.com, address=도쿄)
        return userRequest //object -> json

    }
}

package com.example.mvc.model.http

import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.PropertyNamingStrategy
import com.fasterxml.jackson.databind.annotation.JsonNaming

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)    //해당 클래스는 snake case로 동작 클래스 지정(한번에)
data class UserRequest(
    // Default = null
    var name: String? = null,
    var age: Int? = null,
    var email: String? = null,
    var address: String? = null,

    // @JsonProperty("phone_number") -> camel , snake case 이름 맞춰준다
    var phoneNumber: String? = null     // 대부분 REST에서는 snake case 가 많다 phone_number(요청) -> 이름 불일치

    // 그외 이름 맞추는 다른 방법(Naming Convention)
    // 1. OjbectMapper를 Bean으로 만들어 줄 때 규칙 설정
    // 2. resources의 application.properties에 ObjectMapper가 동작할 Naming 규칙 설정
)
728x90

댓글

Designed by JB FACTORY