μ£Όμ μ΄λ Έν μ΄μ μ 리
β’
μμ‘΄μ± μ΄λ
Έν
μ΄μ
β¦
@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
ν΄λΉ 컨νΈλ‘€λ¬ νμμ 컨νΈλ‘€λ¬ λ©μλ λ€μ @ResponseBody λ₯Ό λΆμ΄μ§ μμλ, κΈ°λ³Έμ μΌλ‘ λ·° νμ΄μ§κ° μλλΌ λ°μ΄ν°(JSON, XML)λ₯Ό μλ΅νλ€.
@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
μμ±μ λͺ
μνμ§ μκ³ μλ΅ν΄μ μ°λ©΄, κΈ°λ³Έ URL κ²½λ‘λ§ λ§€νν μ μλ€.
@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 μμ²μ λν 맀νμ μ§μ ν©λλ€.
@RequsetMapping μ μμ±λ€μ λμΌνκ² μ¬μ©ν μ μλ€. (method μ μΈ)
@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 λ΄κΈ΄ λ°μ΄ν°λ₯Ό κ°μ²΄ λλ 컬λ μ
μ 맀νν΄μ€λλ€.
JSON, XML [POST] @RequestBody
form-data [POST] @ReqeustParam
form μ POST λ°©μμΌλ‘ μμ²ν΄λ μμ μμ² λ©μμ§μ bodyμ λ°μ΄ν°κ° λ΄κΈ°λλ°, μ€νλ§μ΄ νΌ λ°μ΄ν°λ₯Ό λ³ννμ¬ μμ² νλΌλ―Έν°μ λ΄μμ€λλ€. κ·Έλμ @RequestParam μΌλ‘ κ°μ²΄λ 컬λ μ
μ 맀νν μ μμ΅λλ€.
μ§μ μ μν ν΄λμ€μ κ²½μ°. μμ² νλΌλ―Έν° μ΄λ¦κ³Ό κ°μ²΄μ λ³μλͺ
μ΄ μΌμΉνλ©΄ @RequestParam μ μ°μ§ μμλ μλ 맀νν©λλ€.
@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)μ λ°μ΄ν°λ₯Ό 맀ννλ μ΄λ
Έν
μ΄μ
ν
νλ¦Ώ μμ§(thymeleaf, jsp)λ₯Ό μ¬μ©νλ€λ©΄, String λ°ννμ
μΌλ‘ βλ·°νμΌ κ²½λ‘β λ₯Ό μ§μ νλ©΄, ν΄λΉ λ·° νμΌμ html λ‘ λ λλ§νμ¬ μλ΅νλ€.
컨νΈλ‘€λ¬ λ©μλμ @ResponseBody λ₯Ό λΆμ΄λ©΄, ν
νλ¦Ώ μμ§μ ν΅ν΄μ λ·° νμ΄μ§λ₯Ό μ¬μ© μκ³ , μ§μ ν λ¬Έμμ΄μ μλ΅ λ©μμ§ λ³Έλ¬Έμ λ΄μμ μ μ‘νλ€.
/**
* β @ResponseBody
* : μλ΅ λ©μμ§ λ³Έλ¬Έμ λ°μ΄ν°λ₯Ό λ΄μμ μ μ‘ν΄μ£Όλ μ΄λ
Έν
μ΄μ
* β
λ·° νμ΄μ§λ₯Ό μλ΅νμ§ μκ³ , ν
μ€νΈ λ°μ΄ν°λ₯Ό κ·Έλλ‘ μλ΅νλ€.
* @return
*/
@ResponseBody
@GetMapping("/body")
public String testBody() {
return "TEST";
}
Java
볡μ¬