์ฃผ์ ์ด๋ ธํ ์ด์ ์ ๋ฆฌ
โข
์์กด์ฑ ์ด๋
ธํ
์ด์
โฆ
@Component
โฆ
@Autowired
โฆ
@Controller
โฆ
@RestController
โฆ
@Service
โฆ
@Repository
โข
์์ฒญ ๊ฒฝ๋ก ๋งคํ ์ด๋
ธํ
์ด์
โฆ
@Controller or @RestController
โฆ
@RequestMapping
โช
@GetMapping
โช
@PostMapping
โช
@PutMapping
โช
@DeleteMapping
โข
์์ฒญ ํ๋ผ๋ฏธํฐ ์ด๋
ธํ
์ด์
โฆ
@RequestParam
โฆ
@PathVaiable
โฆ
@RequestBody
โฆ
@ModelAttribute
@Component
์คํ๋ง ์ปจํ
์ด๋์๊ฒ ํด๋น ํด๋์ค๊ฐ ์ปดํฌ๋ํธ์์ ์๋ ค์ค๋๋ค. ๋ณดํต ์ผ๋ฐ์ ์ธ ํด๋์ค์ ์ฌ์ฉ๋๋ฉฐ, ์๋์ผ๋ก ๊ฒ์ํ์ฌ Bean์ผ๋ก ๋ฑ๋กํฉ๋๋ค.
@Data
@Component
public class User {
private String username;
private String password;
public User() {
this.username = "ALOHA";
this.password = "123456";
}
}
Java
๋ณต์ฌ
@Autowired
์คํ๋ง์์ ์์กด์ฑ ์ฃผ์
(Dependency Injection)์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ํด๋น ์ด๋
ธํ
์ด์
์ด ์๋ ํ๋๋ ๋ฉ์๋์ ํด๋นํ๋ Bean์ ์๋์ผ๋ก ์ฃผ์
ํฉ๋๋ค.
public class Test {
@Autowired
private User user;
}
Java
๋ณต์ฌ
@Controller
MVC ๊ตฌ์กฐ์์ ์ปจํธ๋กค๋ฌ ํด๋์ค์์ ์ง์ ํ๋ ์ด๋
ธํ
์ด์
@Controllerย ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด์ผย @RequestMapping์ด๋ย @GetMapping,ย @PostMappingย ๊ฐ์ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Spring Boot์์ย @Controller๋ ์คํ๋ง MVC์์ ์ด ํด๋์ค๊ฐ ์น ์์ฒญ์ ์ฒ๋ฆฌํ๋ย ์ปจํธ๋กค๋ฌย ์ญํ ์ ํ๋ค๋ ๊ฒ์ ๋ช
์ํฉ๋๋ค. ๋ฐ๋ผ์ย @Controller๋ฅผ ์ ์ธํด์ผ ์คํ๋ง์ด ํด๋น ํด๋์ค๋ฅผ ์์ฒญ ์ฒ๋ฆฌ์ฉ ๋น(Bean)์ผ๋ก ์ธ์ํ๊ณ ,ย @RequestMappingย ๋ฑ์ผ๋ก ์ง์ ํ ์์ฒญ ๋งคํ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
ํ์ฑํ๋๋ ์ด๋ ธํ ์ด์
์ด๋
ธํ
์ด์
| ์ค๋ช
|
@RequestMapping | ํด๋์ค๋ ๋ฉ์๋์ URL ํจํด์ ๋งคํํ์ฌ ํน์ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. |
@GetMapping | GET ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉฐ URL ๊ฒฝ๋ก๋ฅผ ๋งคํํฉ๋๋ค. |
@PostMapping | POST ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉฐ URL ๊ฒฝ๋ก๋ฅผ ๋งคํํฉ๋๋ค. |
@PutMapping | PUT ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉฐ URL ๊ฒฝ๋ก๋ฅผ ๋งคํํฉ๋๋ค. |
@DeleteMapping | DELETE ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉฐ URL ๊ฒฝ๋ก๋ฅผ ๋งคํํฉ๋๋ค. |
@PatchMapping | PATCH ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉฐ URL ๊ฒฝ๋ก๋ฅผ ๋งคํํฉ๋๋ค. |
@ResponseBody | ๋ฉ์๋ ๋ฐํ ๊ฐ์ JSON ๋๋ XML๋ก ๋ณํํด HTTP ์๋ต ๋ณธ๋ฌธ์ผ๋ก ๋ฐํํฉ๋๋ค. |
@PathVariable | URL ๊ฒฝ๋ก์์ ๋ณ์๋ฅผ ์ถ์ถํ์ฌ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํฉ๋๋ค. |
@RequestParam | ์์ฒญ URL์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ธ๋ฉํฉ๋๋ค. |
@RequestBody | HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์๋ฐ ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํฉ๋๋ค. |
@ModelAttribute | ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉํ๊ณ , ํด๋น ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ์ ์ถ๊ฐํฉ๋๋ค. |
@RequestHeader | HTTP ์์ฒญ ํค๋ ๊ฐ์ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ธ๋ฉํฉ๋๋ค. |
@CookieValue | ํน์ ์ฟ ํค ๊ฐ์ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ธ๋ฉํฉ๋๋ค. |
@SessionAttributes | ์ธ์
์ ํน์ ์์ฑ ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ค๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค. |
@InitBinder | ์ปค์คํ
๋ฐ์ดํฐ ๋ฐ์ธ๋๋ฅผ ์ค์ ํ์ฌ ์ปจํธ๋กค๋ฌ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฐฉ์์ ์กฐ์ ํฉ๋๋ค. |
@Controller
public class HomeController {
@GetMapping({"/", ""})
public String home() {
return "index";
}
}
Java
๋ณต์ฌ
@RestController
@Controller์ ์ ์ฌํ์ง๋ง, ํด๋น ์ปจํธ๋กค๋ฌ๊ฐ JSON ๋๋ XML๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ RESTful ์น ์๋น์ค์์ ์ฌ์ฉ๋ฉ๋๋ค.
= @Controller + @ResponseBody
@RestController์๋ง ํ์ฑํ๋๋ ์ด๋ ธํ ์ด์ ๋ชฉ๋ก
์ด๋
ธํ
์ด์
| ์ค๋ช
|
@ResponseBody | @RestController๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ฉ์๋์ ์ด ์ด๋
ธํ
์ด์
์ด ์๋ ์ ์ฉ๋์ด, ๋ฉ์๋ ๋ฐํ ๊ฐ์ HTTP ์๋ต ๋ณธ๋ฌธ์ผ๋ก ์ง๋ ฌํํ์ฌ ๋ฐํํฉ๋๋ค.ย @Controller์์๋ ๋ณ๋๋กย @ResponseBody๋ฅผ ๋ช
์ํด์ผ ํ์ง๋ง,ย @RestController์์๋ ์ด๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. |
@RestControllerAdvice | @ControllerAdvice์ ๋์ผํ์ง๋ง,ย @RestController์ ํนํ๋ ์์ธ ์ฒ๋ฆฌ ๋ฐ ์ ์ญ ์ค์ ์ ์ ๊ณตํ๋ ์ด๋
ธํ
์ด์
์
๋๋ค. ์ฃผ๋ก REST API์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ค์์์ ๊ด๋ฆฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. (@ExceptionHandler์ ํจ๊ป ์ฌ์ฉ๋จ) |
@ResponseStatus | @RestController์์ HTTP ์ํ ์ฝ๋์ ์๋ต ๋ณธ๋ฌธ์ ํจ๊ป ์ฒ๋ฆฌํ ๋ ์ ์ฉํฉ๋๋ค. ์์ธ ํด๋์ค์์ ์ด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด, ๋ฐ์ํ ์์ธ์ ๋ํด ์ํ ์ฝ๋๋ฅผ ์ง์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์ธ ๋ฐ์ ์ ์๋์ผ๋ก 404 ์ํ ์ฝ๋๋ฅผ ๋ฐํํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค. |
@JsonView | ํน์ ๋ทฐ(View)๋ฅผ ์ ์ํ์ฌ JSON ์๋ต ์ ๋ฐํํ ํ๋๋ฅผ ๋์ ์ผ๋ก ์ ์ดํ ์ ์์ต๋๋ค. REST API์์ ํ์ํ ํ๋๋ง ์๋ตํ๊ณ ์ถ์ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. |
@Slf4j
@RestController
@RequestMapping("/rest")
public class TestRestController {
/**
* โญ @RestController = @Controller + @ResponseBody
* - @ResponseBody ๊ฐ ์์ด๋, ๋ฐ์ดํฐ๋ฅผ ์๋ต ๋ณธ๋ฌธ(body)์ ๋ด์์ ์ ์กํ๋ค.
* @return
*/
@GetMapping("/body")
public String restBody() {
return "REST";
}
}
Java
๋ณต์ฌ
@RestController
public class TestRestController {
@Autowired
private User user;
@GetMapping("/user")
public User user() {
return user;
}
}
Java
๋ณต์ฌ
Userย ํด๋์ค์ ํ๋๊ฐย privateย ์ ๊ทผ ์ ์ด์๋ก ๋์ด ์์ด, ์ด๋ฅผ JSON ํ์์ผ๋ก ๋ฐํํ๋ ค๋ฉดย getter ๋ฉ์๋๊ฐ ํ์ํฉ๋๋ค. Spring์ย Userย ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ์ง๋ ฌํํ ๋ Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ฐ, Jackson์ ๊ธฐ๋ณธ์ ์ผ๋กย getterย ๋ฉ์๋๊ฐ ์์ ๋ ํด๋น ํ๋๋ฅผ ์ง๋ ฌํํฉ๋๋ค.
@Service
๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์๋น์ค ํด๋์ค์์ ํ์ํฉ๋๋ค.
ํ์ฑํ๋๋ ์ด๋ ธํ ์ด์
์ด๋
ธํ
์ด์
| ์ค๋ช
|
@Autowired | ์์กด์ฑ ์ฃผ์
์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.ย @Serviceย ํด๋์ค ๋ด์์ ๋ค๋ฅธ ๋น(์: ๋ฆฌํฌ์งํ ๋ฆฌ ๋๋ ๋ค๋ฅธ ์๋น์ค)์ ์๋์ผ๋ก ์ฃผ์
๋ฐ์ ์ ์์ต๋๋ค. |
@Transactional | ์๋น์ค ๋ฉ์๋์ ํธ๋์ญ์
์ฒ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์์
์์ ํธ๋์ญ์
์ ์์ํ๊ณ ์ข
๋ฃํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. |
@PostConstruct | ์๋น์ค ํด๋์ค๊ฐ ์์ฑ๋ ํ ์ด๊ธฐํ ์์
์ ์ํํ ์ ์๋๋ก ํด์ค๋๋ค. ๊ฐ์ฒด ์์ฑ ๋ฐ ์์กด์ฑ ์ฃผ์
ํ ์คํ๋ฉ๋๋ค. |
@PreDestroy | ์๋น์ค ํด๋์ค๊ฐ ์๋ฉธ๋๊ธฐ ์ ์ ํธ์ถ๋ฉ๋๋ค. ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๊ฑฐ๋ ์ข
๋ฃ ์์
์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. |
@Value | Spring ์ค์ ํ์ผ์์ ๊ฐ์ ์ฃผ์
๋ฐ์ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ดย application.properties์์ ์ค์ ํ ๊ฐ์ ์ฃผ์
๋ฐ์ ์ ์์ต๋๋ค. |
@Qualifier | ๋์ผํ ํ์
์ ๋น์ด ์ฌ๋ฌ ๊ฐ ์์ ๋, ํน์ ๋น์ ์ ํํ์ฌ ์ฃผ์
๋ฐ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.ย @Autowired์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค. |
@Async | ๋ฉ์๋๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๋๋ก ์ค์ ํฉ๋๋ค. ๋น๋๊ธฐ ์์
์ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. |
@Bean | @Serviceย ํด๋์ค ๋ด์์ย @Bean์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋น์ ์์ฑํ ์ ์์ต๋๋ค. ์ฃผ๋ก ์๋น์ค ๋ด์์ ํน์ ๊ฐ์ฒด๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. |
@Scope | ๋น์ ๋ฒ์๋ฅผ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ฑ๊ธํค(singleton)์ด๋ฉฐ, ์์ฒญ(request), ์ธ์
(session) ๋ฑ ๋ค์ํ ๋ฒ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. |
@Profile | ํน์ ํ๊ฒฝ(์: ๊ฐ๋ฐ, ๋ฐฐํฌ)์ ๋ฐ๋ผ ๋น์ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋น์ค๋ฅผ ์ ๊ณตํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. |
UserService.java
public interface UserService {
public void test(User user) throws Exception;
}
Java
๋ณต์ฌ
UserServiceImpl.java
@Slf4j
@Service
public class UserServiceImpl implements UserService {
@Override
public void test(User user) throws Exception {
log.info("UserServceImpl - test()");
}
}
Java
๋ณต์ฌ
@Repository
๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์ DAO(Data Access Object) ํด๋์ค์์ ํ์ํฉ๋๋ค.
ํ์ฑํ ๋๋ ์ด๋ ธํ ์ด์
์ด๋
ธํ
์ด์
| ์ค๋ช
|
@Autowired | ์์กด์ฑ ์ฃผ์
์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.ย @Repositoryย ํด๋์ค ๋ด์์ ๋ค๋ฅธ ๋น(์: ์๋น์ค ํด๋์ค ๋๋ ๋ค๋ฅธ ๋ฆฌํฌ์งํ ๋ฆฌ)์ ์๋์ผ๋ก ์ฃผ์
๋ฐ์ ์ ์์ต๋๋ค. |
@PersistenceContext | EntityManager๋ฅผ ์ฃผ์
๋ฐ์ ๋ ์ฌ์ฉํฉ๋๋ค. JPA๋ฅผ ์ฌ์ฉํ ๋ย @Repositoryย ํด๋์ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํฉ๋๋ค. |
@Transactional | ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.ย @Repositoryย ํด๋์ค ๋ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์์
์ ํธ๋์ญ์
์ผ๋ก ๊ฐ์ธ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. |
@Query | ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.ย @Repository์์ JPQL, ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ ๋ฑ์ ์ ์ํ์ฌ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. |
@Modifying | @Query์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ์์ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ํ๋
๋๋ค. ์๋ฅผ ๋ค์ด,ย UPDATE๋ย DELETEย ์ฟผ๋ฆฌ์์ ์ฌ์ฉ๋ฉ๋๋ค. |
@Transactional
(readOnly=true) | ํธ๋์ญ์
์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ ์ต์ ํํ๊ณ , ๋ฐ์ดํฐ ์์ ์์ด ์กฐํ๋ง ํ ๋ ์ฌ์ฉํฉ๋๋ค. |
@EnableJpaRepositories | @Repository๋ฅผ ์ฌ์ฉํ์ฌ JPA ๋ฆฌํฌ์งํ ๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ๋ฐ ํ์ํ ์ด๋
ธํ
์ด์
์
๋๋ค. JPA ์ค์ ์ ์๋์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. |
@QueryHints | JPA ์ฟผ๋ฆฌ์์ ์ถ๊ฐ์ ์ธ ํํธ๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ฑ๋ฅ์ ์ต์ ํํ๊ฑฐ๋ ์ฟผ๋ฆฌ ์คํ ๋ฐฉ์์ ์ ์ดํ ๋ ์ ์ฉํฉ๋๋ค. |
@RequestMapping
์์ฒญ ๋งคํ์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํด๋์ค ๋ ๋ฒจ์์๋ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๊ณ , ๋ฉ์๋ ๋ ๋ฒจ์์๋ ๊ฒฝ๋ก์ HTTP ๋ฉ์๋๋ฅผ ์ง์ ํฉ๋๋ค.
โข
์์ฑ
โฆ
value
โฆ
method
โฆ
headers
โฆ
consumes
โฆ
produces
โฆ
name
@RequestMapping("/path/sub")
Java
๋ณต์ฌ
์์ฑ | ์ค๋ช
| ์์ |
value ๋๋ path | ์์ฒญ์ ์ฒ๋ฆฌํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค. | @RequestMapping(value = "/example") |
method | ์์ฒญ์ ์ฒ๋ฆฌํ HTTP ๋ฉ์๋๋ฅผ ์ง์ ํฉ๋๋ค. | @RequestMapping(value = "/example", method = RequestMethod.GET) |
params | ์์ฒญ ํ๋ผ๋ฏธํฐ์ ์กด์ฌ ์ฌ๋ถ ๋ฐ ๊ฐ์ ๋ฐ๋ผ ๋งคํ์ ์ ํํฉ๋๋ค. | @RequestMapping(value = "/example", params = "id=1") |
headers | ์์ฒญ ํค๋์ ์์ฑ์ ๋ฐ๋ผ ๋งคํ์ ์ ํํฉ๋๋ค. | @RequestMapping(value = "/example", headers = "content-type=application/json") |
consumes | ์๋นํ ๋ฏธ๋์ด ํ์
์ ์ง์ ํฉ๋๋ค. | @RequestMapping(value = "/example", consumes = MediaType.APPLICATION_JSON_VALUE) |
produces | ์์ฑํ ๋ฏธ๋์ด ํ์
์ ์ง์ ํฉ๋๋ค. | @RequestMapping(value = "/example", produces = MediaType.APPLICATION_JSON_VALUE) |
name | ๋งคํ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. | @RequestMapping(value = "/example", name = "exampleMapping") |
@GetMapping, @PostMapping @PutMapping, @DeleteMapping
๊ฐ๊ฐ GET, POST, PUT, DELETE HTTP ์์ฒญ์ ๋ํ ๋งคํ์ ์ง์ ํฉ๋๋ค.
@RequestParam
HTTP ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํฉ๋๋ค.
โข
์์ฒญ URL
http://localhost:8080/example?A=100&B=200
Java
๋ณต์ฌ
@RequsetMapping("/test")
public void method( @RequestParam("A") String a, @RequestParam("B") String b ) {
...
}
Java
๋ณต์ฌ
@RequsetMapping("/test")
public void method( @RequestParam String A, @RequestParam String B ) {
...
}
Java
๋ณต์ฌ
@RequsetMapping("/test")
public void method( String A, String B ) {
...
}
Java
๋ณต์ฌ
@PathVariable
URI ํ
ํ๋ฆฟ ๋ณ์ ๊ฐ์ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํฉ๋๋ค.
http://localhost:8080/example/{A}/{B}
Java
๋ณต์ฌ
@RequsetMapping("/test")
public void method(@PathVariable("A") String a, @PathVariable("B") String b ) {
...
}
Java
๋ณต์ฌ
@RequestBody
HTTP ์์ฒญ ๋ณธ๋ฌธ์ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ๋งคํํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ POST ๋ฐฉ์์ผ๋ก ์์ฒญํ ๋, ์์ฒญ ๋ฉ์์ง์ body ๋ด๊ธด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด ๋๋ ์ปฌ๋ ์
์ ๋งคํํด์ค๋๋ค.
@Slf4j
@Controller
@RequestMapping("/test")
public class TestController {
/**
* [POST] - /test/json
* data : (BODY) > (JSON) > { "data1" : "value1", "data2" : "value2" }
* @param map
* @return
* โญ @RequestBody
* : HTTP ์์ฒญ ๋ฉ์์ง์ ๋ณธ๋ฌธ(BODY) ๋ฅผ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ๋งคํํ๋ ์ด๋
ธํ
์ด์
* โ
์ฃผ๋ก JSON, XML ๋ฐ์ดํฐ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋งคํํ๋ ๋ฐ ์ฌ์ฉ
* โ FORM[POST] ์์ฒญ์ผ ๋๋ ์ฌ์ฉํ์ง ์๋๋ค.
* - FORM ์์ฒญ์ผ ๋๋, ๊ฐ์ฒด๋ ์ปฌ๋ ์
์ผ๋ก ์๋ ๋งคํ๋๋ค.
*/
@PostMapping("/json")
public String jsonTest(@RequestBody Map<String, String> map) {
log.info("[POST] - /test");
log.info("map : " + map);
Set<String> set = map.keySet();
for (String key : set) {
String value = map.get(key);
log.info("key : "+ key + ", value : " + value);
}
return "test";
}
/**
* /test/form
* data : (BODY) > (FORM) > formData
* โ
* ๐(์์ฒญ)[POST]/test/form
* body : formData
* - POST ๋ก ์์ฒญ ์, formData ๋ body ์ ๋ด๊ฒจ์ ธ์ ๋ณด๋ด์ง๋ค.
* ๐(Spring)
* - ํผ์ผ๋ก ์ ์ก๋ ์์ฒญ body์ ๋ฐ์ดํฐ๊ฐ ์์ง๋ง,
* ์คํ๋ง๐์ด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด,
* ๋ด๋ถ์ ์ผ๋ก body์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ๋งคํํฉ๋๋ค.
* โก ๊ทธ๋์, ํผ ์์ฒญ ๋ฐ์ดํฐ๋ @RequestParam ์ผ๋ก ๋งคํ ๊ฐ๋ฅํฉ๋๋ค.
* @param map
* @return
*/
@PostMapping("/form")
public String formTest(@RequestParam Map<String, String> map) {
log.info("[POST] - /test");
log.info("map : " + map);
Set<String> set = map.keySet();
for (String key : set) {
String value = map.get(key);
log.info("key : "+ key + ", value : " + value);
}
return "test";
}
/**
* /test/form/user
* data : (BODY) > (FORM) > formData
* โ
( @RequestParam ) User user
* - @RequestParam ์๋ต ๊ฐ๋ฅ - ์คํ๋ง์ด ๊ฐ์ฒด์ ๋ณ์๋ฅผ ๋ถ์ํด์
* ์์ฒญ ํ๋ผ๋ฏธํฐ๋ช
๊ณผ ์ผ์นํ๋ ๋ณ์์ ์๋ ๋งคํํ๋ค.
* @param user
* @return
*/
@PostMapping("/form/user")
public String user(User user) {
log.info("[POST] - /test/user");
log.info("user : " + user);
return "test";
}
/**
* /test/json/user
* data : (BODY) > (JSON) > { "name" : "joeun", "age" : "20" }
* โญ @RequestBody
* - ์์ฒญ ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋งคํํ๋ค.
* โ
์๋ตํ๋ฉด ์๋ ๋งคํํด์ฃผ์ง ์๋๋ค.
* @param user
* @return
*/
@PostMapping("/json/user")
public String jsonUser(@RequestBody User user) {
log.info("[POST] - /test/json/user");
log.info("user : " + user);
return "test";
}
}
Java
๋ณต์ฌ
@ModelAttribute
์ปจํธ๋กค๋ฌ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋์ผ๋ก ๋ชจ๋ธ์ ๋ฑ๋กํด์ฃผ๋ ์ด๋
ธํ
์ด์
/**
* โญ @ModelAttribute
* ์ปจํธ๋กค๋ฌ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋์ผ๋ก ๋ชจ๋ธ์ ๋ฑ๋กํด์ฃผ๋ ์ด๋
ธํ
์ด์
* โ
name ์ ์ง์ ํ์ง ์์ผ๋ฉด, ๋ณ์๋ช
์ name์ผ๋ก ์ง์ ํ๋ค.
* @param user
* @return
*/
@GetMapping("/model")
public String testModel(@ModelAttribute User user) {
user.setName("๊น์กฐ์");
user.setAge(30);
return "user";
}
Java
๋ณต์ฌ
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>user</title>
</head>
<body>
<h1>user</h1>
<h3 th:text="${ user.name }" ></h3>
<h3 th:text="${ user.age }" ></h3>
</body>
</html>
HTML
๋ณต์ฌ
@ResponseBody
์๋ต ๋ฉ์์ง์ ๋ณธ๋ฌธ(body)์ ๋ฐ์ดํฐ๋ฅผ ๋งคํํ๋ ์ด๋
ธํ
์ด์
/**
* โญ @ResponseBody
* : ์๋ต ๋ฉ์์ง ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ์ ์กํด์ฃผ๋ ์ด๋
ธํ
์ด์
* โ
๋ทฐ ํ์ด์ง๋ฅผ ์๋ตํ์ง ์๊ณ , ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์๋ตํ๋ค.
* @return
*/
@ResponseBody
@GetMapping("/body")
public String testBody() {
return "TEST";
}
Java
๋ณต์ฌ








