post 방식으로 form으로 데이터를 전달하거나 URL 쿼리문에 파라미터로 던진것들은
@RequestParam을 통해 받을수 있습니다.
<소스코드>
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class SampleController {
@GetMapping("/events/form")
public String eventForm(Model model) {
Event newEvent = new Event();
newEvent.setLimit(50);
model.addAttribute("event",newEvent);
return "/events/form";
}
@PostMapping("/events")
@ResponseBody
public Event getEvent(@RequestParam(required = false , defaultValue = "sungwon") String name , @RequestParam Integer limit) {
Event event = new Event();
event.setName(name);
event.setLimit(limit);
return event;
}
}
@RequestParam도 변수명과 파라미터명이 같다면 생략 가능하며
required = false를 하면 파라미터로 값이 없어도 Bad Request가 나지 않으며
defaultValue를 통해 값을 초기화 할 수 있습니다.
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="#" th:action="@{/events}" method="post" th:object="${event}">
<input type="text" title="name" th:field="*{name}"/>
<input type="text" title="limit" th:field="*{limit}"/>
<input type="submit" value="Create"/>
</form>
</body>
</html>
<테스트>
package com.example.demo;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void eventForm() throws Exception{
mockMvc.perform(get("/events/form"))
.andDo(print())
.andExpect(view().name("/events/form"))
.andExpect(model().attributeExists("event"));
}
@Test
public void createEvent() throws Exception{
mockMvc.perform(post("/events?name=sungwon&limit=20"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("name").value("sungwon"));
mockMvc.perform(post("/events").param("name", "sungwon").param("limit", "20"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("name").value("sungwon"));
}
}
'Spring > SpringMVC' 카테고리의 다른 글
[Spring MVC] @SessionAttributes (0) | 2019.08.15 |
---|---|
[Spring MVC] @Valid vs @Validated (1) | 2019.08.13 |
[Spring MVC] @ModelAttribute (0) | 2019.08.13 |
[Spring MVC] 미디어 타입 ( MediaType ) (0) | 2019.07.25 |
[Spring MVC] URI 패턴 (0) | 2019.07.19 |