๋ชฉ์ฐจ

spring์์ @RequestBody๋ก String type์ ๋ณ์ ๋ฐ๊ธฐ
์คํ๋ง RestFul๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ๋ฐ์ ๋ ๋นํฉํ๋ ๊ฒฝํ์ด ์์ด ์ด๋ฅผ ๊ธฐ๋กํ๋ค.
๋ณดํต ์คํ๋ง์์ ํด๋ผ์ด์ธํธ์์ ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ Dto๋ Vo๋ฑ์ ๊ฐ์ฒด ํ์
์ผ๋ก ๋ฐ์ธ๋ฉ ์ ์๋์ฒ๋ผ ๊ฐ์ฒด๋ก ์ ๋ฌ ๋ฐ๋๋ก ํ๋ฉด ๋๋ค.
package study.lsyrestapitest1.controller.api;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import study.lsyrestapitest1.domain.dto.UserDto;
import study.lsyrestapitest1.service.UserService;
@RestController
@Slf4j
@RequiredArgsConstructor
@RequestMapping(value = "/v1/users")
public class UserApiController {
private final UserService userService;
@GetMapping(value = "")
public Object findList(@RequestBody UserDto userDto) throws Exception {
return null;// ์ด๊ฑด ์ผ๋จ ๋ฌด์ํ์
}
}
ํ์ง๋ง ๋ง์ผ ํด๋ผ์ด์ธํธ์์ ์ ๋ฌ ๋ฐ๋ parameter๊ฐ ์ฌ๋ฌ๊ฐ๊ฐ ์๋๋ผ ๊ฐ์ฒด๋ก ๋ฐ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ๋?
์๋ฅผ ๋ค์ด user_name๋ฑ 1๊ฐ๋ง ์ ๋ฌ ๋ฐ๋ ๊ฒฝ์ฐ, ๋ญ๊ฐ ๋ฐ์ดํฐ 1๊ฐ๋ง ๋ฐ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ข ์ ๋งคํ๋ค๋ ์๊ฐ์ด ๋ค์ด ๋น์ฐํ ์๋์ฒ๋ผ @RequestBody๋ฅผ ์ ์ธํ ๋ค์ Stringํ์
์ผ๋ก userName์ ๋ฐ์๋ค.
ํ
์คํธ๋ฅผ ์ํด ์๋์ฒ๋ผ ์ฝ๋๋ค์ ์์ฑํ๋ค.
ํ ์ด๋ธ
--table create
CREATE TABLE `temp_user` (
`user_seq` int(20) NOT NULL AUTO_INCREMENT,
`user_name` varchar(30) NOT NULL COMMENT '์ฌ์ฉ์๋ช
',
`user_email` varchar(30) NOT NULL COMMENT '์ฌ์ฉ์ ์ด๋ฉ์ผ',
`reg_date` timestamp NULL DEFAULT NULL COMMENT '๋์ถ์ผ',
PRIMARY KEY (`user_seq`,`user_email`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--------------------------------------------------------------------------------------
--test data insert
INSERT INTO reno.temp_user
(user_seq, user_name, user_email, reg_date)
VALUES(1, 'ํ ๋ฅด', 'thor@naver.com', '2022-12-21 22:57:07.000');
INSERT INTO reno.temp_user
(user_seq, user_name, user_email, reg_date)
VALUES(2, 'ํํฌ', 'hulk@naver.com', '2022-12-21 22:57:07.000');
INSERT INTO reno.temp_user
(user_seq, user_name, user_email, reg_date)
VALUES(3, 'ํ๋
ธ์ค', 'tanos@naver.com', '2022-12-21 22:57:07.000');
INSERT INTO reno.temp_user
(user_seq, user_name, user_email, reg_date)
VALUES(4, 'ํ๋
ธ์ค', 'ta@naver.com', '2023-01-03 18:17:00.000');
INSERT INTO reno.temp_user
(user_seq, user_name, user_email, reg_date)
VALUES(5, '๋ฃจ๊ฐ', 'lo@naver.com', '2023-01-03 18:22:49.000');
INSERT INTO reno.temp_user
(user_seq, user_name, user_email, reg_date)
VALUES(6, '๋ฆฌ๋ณธ', 'libon@naver.com', '2023-01-03 18:25:31.000');
INSERT INTO reno.temp_user
(user_seq, user_name, user_email, reg_date)
VALUES(7, '', 'libon@naver.com', '2023-01-03 18:26:02.000');
INSERT INTO reno.temp_user
(user_seq, user_name, user_email, reg_date)
VALUES(8, '๋กํค', 'libon@naver.com', '2023-01-03 18:28:13.000');
INSERT INTO reno.temp_user
(user_seq, user_name, user_email, reg_date)
VALUES(9, 'ํ
๋', 'terran@naver.com', '2023-01-03 21:55:14.000');
dto
package study.lsyrestapitest1.domain.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter @Setter
@ToString
@NoArgsConstructor
public class UserDto {
private int user_seq;
private String user_name;
private String user_email;
private String reg_date;
}
controller
package study.lsyrestapitest1.controller.api;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import study.lsyrestapitest1.service.UserService;
@RestController
@Slf4j
@RequiredArgsConstructor
@RequestMapping(value = "/v1/users")
public class UserApiController {
private final UserService userService;
@GetMapping(value = "")
public Object findList(@RequestBody String userName) throws Exception {
return userService.findMembers(userName);
}
}
service
package study.lsyrestapitest1.service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import study.lsyrestapitest1.domain.dto.UserDto;
import study.lsyrestapitest1.mapper.UserMapper;
import java.util.List;
@Service
@Slf4j
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class UserService {
private final UserMapper userMapper;
public List<UserDto> findMembers(String userName) throws Exception{
return userMapper.findMembers(userName);
}
}
mapper(interface)
package study.lsyrestapitest1.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import study.lsyrestapitest1.domain.dto.UserDto;
import java.util.List;
@Mapper @Repository
public interface UserMapper {
List<UserDto> findMembers(String userName);
}
mapper(xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="study.lsyrestapitest1.mapper.UserMapper">
<select id="findMembers" parameterType="String" resultType="study.lsyrestapitest1.domain.dto.UserDto">
SELECT user_seq
, user_name
, user_email
, reg_date
FROM temp_user
<where>
<if test="userName != null and userName != ''" >user_name = #{userName}</if>
</where>
</select>
</mapper>
์์์ ์ฌ์ฉ๋ <where></where>๋ ์๋๋ฅผ ์ฐธ์กฐ
[mybatis] mybatis ๋์ ์ฟผ๋ฆฌ(feat. <where></where>)
๋ชฉ์ฐจ mybatis Dynamic SQL ๐ ๊ณ์ ์ค์ ํ๋ ๋์ ์ฟผ๋ฆฌ์ด๋ค. ์ค๋ ๋๋ ์ด๊ฑธ ์ดํด ํ์ง๋ง ๋ฏธ๋์ ๋ ๋ ๊น๋จน์ ์ ์์ผ๋ ์ฌ๊ธฐ์ ๋ฉ๋ชจํด ๋๋ค. ๋์ WHERE ํ์ ํ ์ด๋ธ์์ ํ์์ด๋ฆ๊ณผ ์ด๋ฉ์ผ์ ์กด์ฌ์
yaga.tistory.com
์ ๋๊ฒ ์ง?๐
ํ
์คํธ๋ฅผ ํด๋ดค๋๋ฐ ์๋์ฒ๋ผ ๋นํฉ์ค๋ฌ์ด ๊ฒฐ๊ณผ๋ฅผ ํ์ธ ํ๋ค.
ํด๋ผ์ด์ธํธ์์ ํธ์ถ
์ด์ํ๋ค. "ํ ๋ฅด"๋ผ๋ ์ฌ์ฉ์๋ช
์ ํ
์ด๋ธ์ ์๋ ๋ฐ์ดํฐ๋ค.

์๋ฒ ์ฟผ๋ฆฌ ํ์ธ

๋ญ๊ฐ ์ ๋๋ก ๋ณํ๋์ง ์์ ๋๋์ด๋ค.
๊ตฌ๊ธ๋ง ๊ฒฐ๊ณผ Stringํ์
์ ๋ณ์ 1๊ฐ๋ง ๋ฐ์ ๊ฒฝ์ฐ๋ ์๋์ฒ๋ผ map์ผ๋ก ๋ฐ์ผ๋ฉด ๋๋ค.

์ด์ ํ ์คํธ๋ฅผ ํ๋ฉด ์๋์ฒ๋ผ ๊ฒฐ๊ณผ๊ฐ ์ ์์ ์ผ๋ก ๋ฐํ๋๋ค.

์ ํํ ์ดํด ํ๋ ค๋ฉด ์คํ๋ง์ HttpMessageConvert ๋ด๋ถ์ ์ผ๋ก ๊ณต๋ถํด์ผ ํ๊ณ ๋๋ ์ ํํ ์ดํดํ์ง ๋ชปํ์ผ๋ ์ด ๊ณณ์ ๊ธฐ๋กํ์ง ์๋๊ฒ ๋ซ๊ฒ ๋ค๋ ํ๋จ์ ํ๋ค.
๋์ค์ ์๊ฐ ๋ด์ HttpMessageConvert์ ๋ํด์๋ ๊ณต๋ถํด ๋ณด์.(๋ํํ
ํ๋ ๋ง์ด๋ค.)
๊ด๋ จํด์ ํจ์ฌ ์ ์ ๋ฆฌ๋ ๋ธ๋ก๊ทธ ๊ธ๋ค์ด ๋ง๋ค.
์ค๋ ์๋ก์ด ๊ฒฝํ์ ํ์ผ๋ ๋ค์๋ฒ์ ์ฝ์ง ์๊ฐ์ด ์ค์ด๋ค ๊ฒ์ด๋ค.

๋๊ธ