【发布时间】:2013-11-29 21:05:10
【问题描述】:
注册控制器不允许通过以下方式发送帐户 id 字段:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("id");
binder.setRequiredFields("username","password","emailAddress");
}
@RequestMapping(method = { RequestMethod.POST, RequestMethod.PUT })
public String handleRegistration(@ModelAttribute Account account, BindingResult result) {
if (result.hasErrors()) {
return "customer/register";
}
我运行以下测试以确保不允许使用 ID:
@Test
public void testPutRequestWithIdPassedRegistrationController() throws Exception {
this.mockMvc.perform(post("/customer/register")
.param("id", "1")
.param("username", "shouldBeIgnored")
.param("password", "123")
.param("emailAddress", "testIgnored@gmail.com")
.param("address.country", "RU")
.param("address.city", "Nsk")
.param("address.street", "Lenin"))
.andExpect(model().hasErrors())
.andExpect(view().name("customer/register"));
}
但测试失败原因: java.lang.AssertionError:预期的绑定/验证错误
这里的比较是在不通过不可空字段的情况下尝试创建帐户的测试并且它通过了很好,这意味着 setRequiredFields 工作正常:
@Test
public void testPutRequestWithoutNeededFieldsRegistrationController() throws Exception {
this.mockMvc.perform(post("/customer/register"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(view().name("customer/register"))
.andExpect(model().hasErrors())
.andExpect(model().errorCount(3));
}
为什么它会以这种方式工作?如何确定不允许使用该 id?
【问题讨论】:
标签: java validation spring-mvc testing spring-mvc-test