스프링 MVC 활용(11) : 핸들러 메소드 3부 - 요청 매개변수(단순 타입)

de_sj_awa·2021년 7월 3일
0

11. 핸들러 메소드 3부 - 요청 매개변수(단순 타입)

요청 매개변수란?

  • 쿼리 매개변수
  • 폼 데이터

@RequestParam

  • 요청 매개변수에 들어있는 단순 타입 데이터를 메소드 아규먼트로 받아올 수 있다.
  • 값이 반드시 있어야 한다.
    - required=false 또는 Optional을 사용해서 부가적인 값으로 설정할 수도 있다.
  • String이 아닌 값들은 타입 컨버전을 지원한다.
  • Map<String, String> 또는 MultiValueMap<String, String>에 사용해서 모든 요청 매개변수를 받아 올 수도 있다.
  • 이 애노테이션은 생략 할 수 있다.
@Controller
public class SampleController {

    @PostMapping("/events")
    @ResponseBody
    public Event createEvent(@RequestParam String name){
        Event event = new Event();
        event.setName(name);
        return event;
    }
}
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {

    @Autowired
    MockMvc mockMvc;
	
    @Test
    public void createEvent() throws Exception{
        mockMvc.perform(post("/events?name=spring"))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name").value(spring));
    }
}

혹은 폼 데이터로 보내는 걸 확인하고 싶으면 param을 이용한다.

@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {

    @Autowired
    MockMvc mockMvc;
	
    @Test
    public void createEvent() throws Exception{
        mockMvc.perform(post("/events)
                .param("name", "spring"))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name").value(spring));
    }
}

모든 요청 파라미터를 Map으로 받아올 수도 있다.

@Controller
public class SampleController {

    @PostMapping("/events")
    @ResponseBody
    public Event createEvent(@RequestParam Map<String, String> param){
        Event event = new Event();
        event.setName(param.get("name"));
        return event;
    }
}
public class Event {

    private Integer id;

    private String name;

    private Integer limit;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getLimit() {
        return limit;
    }

    public void setLimit(Integer limit) {
        this.limit = limit;
    }
}
@Controller
public class SampleController {

    @PostMapping("/events")
    @ResponseBody
    public Event createEvent(@RequestParam String name, @RequestParam Integer limit){
        Event event = new Event();
        event.setName(name);
        event.setLimit(limit);
        return event;
    }
}
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {

    @Autowired
    MockMvc mockMvc;
	
    @Test
    public void createEvent() throws Exception{
        mockMvc.perform(post("/events)
                .param("name", "spring")
                .param("limit", "20"))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name").value(spring));
    }
}

참고

profile
이것저것 관심많은 개발자.

0개의 댓글