diff --git a/src/main/java/kuit/server/controller/PostUserRequestValidator.java b/src/main/java/kuit/server/controller/PostUserRequestValidator.java new file mode 100644 index 0000000..fae8929 --- /dev/null +++ b/src/main/java/kuit/server/controller/PostUserRequestValidator.java @@ -0,0 +1,22 @@ +package kuit.server.controller; + +import kuit.server.dto.user.PostUserRequest; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +@Component +public class PostUserRequestValidator implements Validator { + + @Override + public boolean supports(Class clazz) { + return PostUserRequest.class.isAssignableFrom(clazz); + } + + @Override + public void validate(Object target, Errors errors) { + PostUserRequest postUserRequest = (PostUserRequest) target; + + // 로직 추가 + } +} diff --git a/src/main/java/kuit/server/controller/ResponseController.java b/src/main/java/kuit/server/controller/ResponseController.java new file mode 100644 index 0000000..697bdea --- /dev/null +++ b/src/main/java/kuit/server/controller/ResponseController.java @@ -0,0 +1,25 @@ +package kuit.server.controller; + +import kuit.server.common.response.BaseErrorResponse; +import kuit.server.common.response.BaseResponse; +import kuit.server.common.response.status.BaseExceptionResponseStatus; +import kuit.server.common.response.status.ResponseStatus; +import kuit.server.temp.UserData; +import org.apache.catalina.User; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class ResponseController { + + @RequestMapping("/base-response") + public BaseResponse getSuccessResponse() { + UserData userData = new UserData("kim", 20); + return new BaseResponse<>(userData); + } + + @RequestMapping("/base-error-response") + public BaseErrorResponse getErrorResponse() { + return new BaseErrorResponse(BaseExceptionResponseStatus.BAD_REQUEST); + } +} diff --git a/src/main/java/kuit/server/controller/UserController.java b/src/main/java/kuit/server/controller/UserController.java index 731b583..e03a698 100644 --- a/src/main/java/kuit/server/controller/UserController.java +++ b/src/main/java/kuit/server/controller/UserController.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -23,6 +24,13 @@ public class UserController { private final UserService userService; + private final PostUserRequestValidator postUserRequestValidator; + + @InitBinder + public void init(WebDataBinder dataBinder){ + log.info("init binder {}", dataBinder); + dataBinder.addValidators(postUserRequestValidator); + } /** * 회원 가입 diff --git a/src/main/java/kuit/server/dao/UserDao.java b/src/main/java/kuit/server/dao/UserDao.java index 6f8daa8..c4750bf 100644 --- a/src/main/java/kuit/server/dao/UserDao.java +++ b/src/main/java/kuit/server/dao/UserDao.java @@ -19,6 +19,7 @@ @Repository public class UserDao { + // 파라미터를 바인딩 private final NamedParameterJdbcTemplate jdbcTemplate; public UserDao(DataSource dataSource) { diff --git a/src/main/java/kuit/server/temp/TempController.java b/src/main/java/kuit/server/temp/TempController.java new file mode 100644 index 0000000..f074707 --- /dev/null +++ b/src/main/java/kuit/server/temp/TempController.java @@ -0,0 +1,74 @@ +package kuit.server.temp; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.apache.catalina.User; +import org.springframework.http.HttpEntity; +import org.springframework.stereotype.Controller; +import org.springframework.util.StreamUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +@Slf4j +@Controller +//@RestController +public class TempController { + private ObjectMapper objectMapper = new ObjectMapper(); + + @PostMapping("/request-body-json-v1") + public void requestBodyJsonV1(HttpServletRequest request, HttpServletResponse response) throws IOException { + // convert value in request to json object (string) + ServletInputStream inputStream = request.getInputStream(); + String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); + log.info("messageBody = {}", messageBody); + + // convert json object to UserData object + UserData userData = objectMapper.readValue(messageBody, UserData.class); + log.info("username = {}, age = {}", userData.getUsername(), userData.getAge()); + + response.getWriter().write("ok"); + } + + @ResponseBody + @PostMapping("/request-body-json-v2") + public String requestBodyJsonV2(@RequestBody String messageBody) throws JsonProcessingException { + UserData userData = objectMapper.readValue(messageBody, UserData.class); + log.info("username = {}, age = {}", userData.getUsername(), userData.getAge()); + + // @ResponseBody 안붙이면 ok 라는 뷰를 가진 ViewResolver 반환 + return "ok"; + } + + @ResponseBody + @PostMapping("/request-body-json-v3") + public String requestBodyJsonV3(@RequestBody UserData userData) { + log.info("username = {}, age = {}", userData.getUsername(), userData.getAge()); + return "ok"; + } + + @ResponseBody + @PostMapping("/request-body-json-v4") + public String requestBodyJsonV4(HttpEntity httpEntity) { + UserData userData = httpEntity.getBody(); + log.info("username = {}, age = {}", userData.getUsername(), userData.getAge()); + return "ok"; + } + + @ResponseBody + @PostMapping("/request-body-json-v5") + public UserData requestBodyJsonV5(@RequestBody UserData userData) { + log.info("username = {}, age = {}", userData.getUsername(), userData.getAge()); + return userData; + } + + +} diff --git a/src/main/java/kuit/server/temp/UserData.java b/src/main/java/kuit/server/temp/UserData.java new file mode 100644 index 0000000..41b316b --- /dev/null +++ b/src/main/java/kuit/server/temp/UserData.java @@ -0,0 +1,13 @@ +package kuit.server.temp; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class UserData { + private String username; + private int age; +}