λ°μ΄ν°λ₯Ό μ λ¬ν Mapping μ λ³΄κ° μ μ₯λλ ν΄λμ€. ( λ‘μ§μ²λ¦¬λ₯Ό λ΄λΉ )
μ΄λ»κ² μ²λ¦¬ ν μ§ μλ €μ£Όλ μν λ‘ μΌμ’
μ Modelκ³Ό Viewμ Proxyμν
jspλ ν
νλ¦Ώμ ν΅ν΄ κ²°κ³Όλ¬Όμ νΉμ κ²½λ‘λ‘ μ°κ²° μμΌμ£Όκ±°λ apiμ κ°μ΄ νΉμ λ°μ΄ν°λ₯Ό μ λ¬ν΄μ£Όλ μν
μ΄λ
Έν
μ΄μ
ν΄λΉ ν΄λμ€λ₯Ό controllerλ‘ μΈμνκ² ν΄μ£Όλ μ΄λ
Έν
μ΄μ
@RequestMapping
ν΄λΌμ΄μΈνΈλ‘λΆν° μμ²(request)μ΄ λ€μ΄μμλ μ΄λ€ μμ²(uri)μΈμ§ ꡬλΆνμ¬ μ²λ¦¬νκΈ° μν μ΄λ
Έν
μ΄μ
μ£Όλ‘ ν΄λμ€ λ 벨μμ μ¬μ©
name : Requestλ₯Ό ꡬλΆνκΈ° μν κΈ°λ³Έ κ°μΌλ‘ μ΄λ»κ² 보면 valueμ κ°μ λ³΄μΌ μ μμΌλ, nameμ ν°νλ‘ μ μΈνκ³ valueλ‘ μΈλΆ κ²½λ‘λ₯Ό μ§μ
@Controller
@RequestMapping("store")
public class ItemController {
@ResponseBody
@RequestMapping(value = "/item")
public String getItemName(){
}
}
value / path : uri pathμ ꡬλΆνμ¬ μ΄λ€ ν¨μλ₯Ό μ€νν μ§ Mappingμν€λ κ°
@RequestMapping(value = "/api/item");
method : RequestMethod.GET, RequestMethod.POSTμ κ°μ΄ μμ² λ©μλλ₯Ό ꡬλΆ
produces : Responseμ contentTypeμ μ§μ ν μ μλ€.
@RequestMapping(value = "/api/item",produces = "application/json; charset=UTF-8");
@RequestMapping(value = "/api/item",produces = MediaTypes.HAL_JSON_VALUE);
params : Requestμ μμ² uri νλΌλ―Έν°λ₯Ό λΆμνμ¬ λ³μλ‘ μ¬μ©
@PathVariable : uri pathλ‘ λ€μ΄μ€λ κ°μ ꡬλΆνμ¬ λ³μλ‘ μ¬μ©νκΈ° μν¨
```java
@Controller
@RequestMapping("store")
public class ItemController {
@ResponseBody
@RequestMapping(value = "/item/{name}", method = RequestMethod.GET)
public String getItemName(
@PathVariable("name") String name){
return name;
}
}
```
μμ κ°μ΄ {name}μ λ³μλ‘ μ¬μ©νκΈ° μν μ΄λ
Έν
μ΄μ
μ΄μ§λ§, `@RequestMapping(value="/{id}")`μ κ°μ΄ νΉμ κ²½λ‘ μμ΄ μ¬μ©νμ§ λ§μ.
@RequestParam : /store/item?name=pencilκ³Ό κ°μ΄ λ€μ΄μ€λ uriμ query stringμ μ΄μ©νκΈ° μν μ΄λ
Έν
μ΄μ
@Controller
@RequestMapping("store")
public class ItemController {
@ResponseBody
@RequestMapping(value = "/item", method = RequestMethod.GET)
public String getItemName(
@RequestParam("name") String name){
return name;
}
}
consumes : request bodyμ μ μ₯ν νμ
μ μ ν
@RequestMapping(value = "/api/item",consumes = "application/json");
GetMapping, PostMapping, DeleteMapping, PutMapping ..
@RequestMappingμ νΉμ method κ³ μ μ μΌλ‘ μ μΈλμ΄ μλ μ΄λ
Έν
μ΄μ
μ΄λ€.
λ©μλμ μ¬μ©λμλ€λ©΄ νΉμ‘ κ²½λ‘κ° μμ΄λ ν΄λμ€μ RequestMappingμ μ£Όμ
λ°λλ€.
@ResponseBody, @RequestBody
λΉλκΈ°λ₯Ό μ²λ¦¬ νλ κ²½μ° μ¬μ© (Viewλ₯Ό ν΅ν΄ μΆλ ₯μ΄ λμ§μκ³ http bodyμ λ°μ΄ν°λ₯Ό μ§μ μ¨μ 보λ΄λ κ²)
HTTP BODYμ μ§μ λ°ν.
ν
νλ¦Ώμμ§μ΄ μλ λ°λ‘ λ°μ΄ν°λ₯Ό μ μ‘νλΌλ μ΄λ
Έν
μ΄μ
.
viewResolverκ° μλ HttpMessageConverterκ° λμνλ©°, Stringμ΄λ©΄ StringConverterκ° κ°μ²΄μ΄λ©΄ JsonConverterκ° λμνμ¬ defaultλ κ°μ²΄λ₯Ό jsonνμμΌλ‘λ§λ€μ΄μ μλ΅.
ν΄λΌμ΄μΈνΈμ HTTP Acceptν€λμ μλ²μ 컨νΈλ‘€λ¬ λ°ν νμ
μ 보 λμ μ‘°ν©νμ¬ λ°νλ°©μ μλμΌλ‘ κ²°μ
λ©μλμ λ°ν κ°μ΄ HTTP Response/Request bodyμ μ§μ μ§λ ¬ν λμμμ Springμ μλ¦°λ€.
HttpMessageConverterκ° μ‘΄μ¬νμ¬ νΉμ νν(json,xml..)λ‘ λ€μ΄μ¨ μμ² κ°μ μλ° κ°μ²΄λ‘ λ³ννκ³ μλ΅μ νΉμ ννλ‘ λ³΄λ΄κΈ° μν΄ μ¬μ©λλ€.
HttpMessageConverter
Springμμ μ¬μ©νκΈ° μν΄ κΈ°λ³Έμ μΌλ‘ @EnableWebMvcλ₯Ό μ¬μ©ν΄μ WebMvcConfigurerμ ꡬνν΄μΌ νλ€.
ByteArrayHttpMessageConverter β λ°μ΄νΈ λ°°μ΄ λ³ν
StringHttpMessageConverter β λ¬Έμμ΄ λ³ν
ResourceHttpMessageConverter β λͺ¨λ μ νμ μ₯ν
μ€νΈλ¦Όμ λν΄ org.springframework.- core.io.Resource λ₯Ό λ³ν ν©λλ€.
SourceHttpMessageConverter β javax.xml.transform.Sourceλ₯Ό λ³νν©λλ€.
FormHttpMessageConverter β μμ λ°μ΄ν°λ₯Ό MultiValueMap <String, String> λ‘ /μμ λ³νν©λλ€ .
Jaxb2RootElementHttpMessageConverter β Java κ°μ²΄λ₯Ό XMLλ‘ /λ‘λΆν° λ³νν©λλ€ (JAXB2κ° ν΄λμ€ κ²½λ‘μμλ κ²½μ°μλ§ μΆκ°λ¨).
MappingJackson2HttpMessageConverter β JSON λ³ν (Jackson2κ° ν΄λμ€ κ²½λ‘μμλ κ²½μ°μλ§ μΆκ°λ¨)
MappingJacksonHttpMessageConverter β JSON λ³ν (Jacksonμ΄ ν΄λμ€ κ²½λ‘μμλ κ²½μ°μλ§ μΆκ°λ¨)
AtomFeedHttpMessageConverter β Atom νΌλλ₯Ό λ³νν©λλ€ (Romeμ΄ ν΄λμ€ κ²½λ‘μμλ κ²½μ°μλ§ μΆκ°λ¨).
RssChannelHttpMessageConverter β RSS νΌλλ₯Ό λ³νν©λλ€ (Romeμ΄ ν΄λμ€ κ²½λ‘μμλ κ²½μ°μλ§ μΆκ°λ¨).
μ€νλ§ λΆνΈλ Jackson2ObjectMapperBuilderλ₯Ό JacksonAutoConfigurationν΄λμ€μμ μλμΌλ‘ μ€μ νκΈ° λλ¬Έμ λ³λ€λ₯Έ μ€μ μμ΄ ObjectMapperλ₯Ό μ΄μ©ν΄ JSONννλ₯Ό λ³νν μμλ€.
spring-boot-start-webμ jackson-databindκ° μλμΌλ‘ μμ‘΄μ±μ΄ μ‘νκ²μ λ³Ό μ μλ€.
@ResponseBodyλ₯Ό λͺ¨λ λ©μλμ μ μ©ν κ²κ³Ό λμΌν ν¨κ³Ό
Spring framworkλ HttpEntityλΌλ ν΄λμ€λ₯Ό μ 곡νλλ° μ΄λ response/requestμ HttpHeaderμ HttpBodyλ₯Ό ν¬ν¨νλ ν΄λμ€μ΄λ€.
HttpEntityλ₯Ό μμλ°μ Responseμ ν΄λΉνλ λΆλΆμ λ΄λΉνλ ν΄λμ€μ΄λ€.
status, header, body λΆλΆμ μμ /μ½μ
νμ¬ μλ΅ν€λλ₯Ό λ³΄λΌ μ μκ² ν΄μ€λ€.
build() : build λ΄ parameterλ‘ μ무κ²λ μ
λ ₯μ μν μ nullμΈ bodyμ res λ°ννλ€.
parameterλ‘ bodyλ₯Ό λ°μ μ μλ€.
https://www.baeldung.com/spring-httpmessageconverter-rest