본문으로 바로가기

[Spring MVC] 요청 매개변수 ( @RequestParam)

category Spring/SpringMVC 2019. 8. 13. 20:33

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