繁体   English   中英

如何使用MockMvc传递ModelAttrubute参数?

[英]How to pass ModelAttrubute parameters using MockMvc?

我有这个HTML Spring形式:

<form:form action="addVacancy" modelAttribute="myVacancy">
        <form:label path="name">name</form:label>
        <form:input path="name" ></form:input>
        <form:errors path="name" cssClass="error" />
        <br>
        <form:label path="description">description</form:label>
        <form:input path="description" id="nameInput"></form:input>
        <form:errors path="description" cssClass="error" />
        <br>
        <form:label path="date">date</form:label>
        <input type="date" name="date" />
        <form:errors path="date" cssClass="error" />
        <br>
        <input type="submit" value="add" />
    </form:form>

我通过以下方法处理此表单:

@RequestMapping("/addVacancy")
    public ModelAndView addVacancy(@ModelAttribute("myVacancy") @Valid Vacancy vacancy,BindingResult result, Model model,RedirectAttributes redirectAttributes){
        if(result.hasErrors()){
            model.addAttribute("message","validation error");
            return new ModelAndView("vacancyDetailsAdd");
        }
        vacancyService.add(vacancy);
        ModelAndView mv = new ModelAndView("redirect:goToVacancyDetails");
        mv.addObject("idVacancy", vacancy.getId());
        redirectAttributes.addAttribute("message", "added correctly at "+ new Date());
        return mv;
    }

提交表格后,如何提出相同的请求。 这必须通过MockMvc来完成。

@Test
public void testMethod(){
    MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/addVacancy");
    //what must I  write here?
    ResultActions result = mockMvc.perform(request);
}

我很困惑。

当浏览器需要提交表单时,通常会将表单<input>字段序列化为url编码的参数。 因此,当您要模拟HttpServletRequest ,需要将那些相同的参数添加到请求中。

request.param("name", "some value")
       .param("description", "description value")
       .param("date", "some acceptable representation of date");

DispatcherServlet将使用这些参数来创建一个Vacancy实例,以作为参数传递给您的处理程序方法。

您可以@ModelAttribute .flashAttr()方法传递所需的@ModelAttribute对象,如下.flashAttr()

request.flashAttr("myVacancy", new Vacancy()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM