java – Spring 4 MVC验证不起作用 – BindingResult hasErrors为false
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring 4 MVC验证不起作用 – BindingResult hasErrors为false,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4324字,纯文字阅读大概需要7分钟。
内容图文
![java – Spring 4 MVC验证不起作用 – BindingResult hasErrors为false](/upload/InfoBanner/zyjiaocheng/794/82801730d2fd4b4bb467977e0270b6ec.jpg)
我正在测试一个Spring控制器post方法(使用org.springframework.test.web.servlet.MockMvc),我试图确认当表单中存在验证错误时它会将视图发送回表单中检查BindingResult.hasErrors方法.
这是我的测试
@Test
public void testFilterChannelProgrammesWhenChannelListAndGenreListAreEmptyAndProgNameIsTooLong() throws Exception {
String progName = TestUtil.createStringWithLength(301);
mockMvc.perform(post("/api/filter")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("progName", progName)
.sessionAttr("filter", new ProgrammeSearchDTO())
)
.andExpect(status().isOk())
.andExpect(view().name("api/filter"))
.andExpect(forwardedUrl("/WEB-INF/jsp/api/filter.jsp"))
.andExpect(model().attributeHasFieldErrors("filter", "progName"))
.andExpect(model().attributeHasFieldErrors("filter", "genreIdList"))
.andExpect(model().attributeHasFieldErrors("filter", "channelIdList"))
.andExpect(model().attribute("filter", hasProperty("progName", is(progName))));
verifyZeroInteractions(channelProgrammeServiceMock);
}
这是session属性绑定的DTO
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
public class ProgrammeSearchDTO {
@NotEmpty
private String[] channelIdList;
@NotEmpty
private String[] genreIdList;
private String fromDateTime;
private String toDateTime;
@Length(max = 200)
private String progName;
private boolean subtitled;
private boolean signed;
private boolean film;
public String[] getChannelIdList() {
return channelIdList;
}
public String getFromDateTime() {
return fromDateTime;
}
public String[] getGenreIdList() {
return genreIdList;
}
public String getProgName() {
return progName;
}
public String getToDateTime() {
return toDateTime;
}
public boolean isFilm() {
return film;
}
public boolean isSigned() {
return signed;
}
public boolean isSubtitled() {
return subtitled;
}
public void setChannelIdList(String[] channelIdList) {
this.channelIdList = channelIdList;
}
public void setFilm(boolean film) {
this.film = film;
}
public void setFromDateTime(String fromDateTime) {
this.fromDateTime = fromDateTime;
}
public void setGenreIdList(String[] genreIdList) {
this.genreIdList = genreIdList;
}
public void setProgName(String progName) {
this.progName = progName;
}
public void setSigned(boolean signed) {
this.signed = signed;
}
public void setSubtitled(boolean subtitled) {
this.subtitled = subtitled;
}
public void setToDateTime(String toDateTime) {
this.toDateTime = toDateTime;
}
}
和控制器方法
@RequestMapping(value = "/api/filter", method = RequestMethod.POST)
public String filterChannelProgrammes(@Valid @ModelAttribute ProgrammeSearchDTO programmeSearchDTO, BindingResult result, Model model) {
if(result.hasErrors()) {
return "api/filter";
}
model.addAttribute("results", null);
return "redirect:filterResults";
}
对于此测试,返回“api / filter”;应该采取行动,但hasErrors()始终是假的.我也试过以下
@RequestMapping(value = "/api/filter", method = RequestMethod.POST)
public String filterChannelProgrammes(@Valid @ModelAttribute("filter") ProgrammeSearchDTO programmeSearchDTO, BindingResult result, Model model) {
if(result.hasErrors()) {
return "api/filter";
}
model.addAttribute("results", null);
return "redirect:filterResults";
}
但是hasErrors()仍然是假的
编辑
经过一些挖掘后,我对此进行了排序,它还需要在上下文配置xml中进行以下操作
<mvc:annotation-driven />
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
以及maven pom.xml中的这些依赖项
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.2.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.4</version>
</dependency>
解决方法:
经过一些挖掘后,我对此进行了排序,它还需要在上下文配置xml中进行以下操作
<mvc:annotation-driven />
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
以及maven pom.xml中的这些依赖项
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.2.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.4</version>
</dependency>
内容总结
以上是互联网集市为您收集整理的java – Spring 4 MVC验证不起作用 – BindingResult hasErrors为false全部内容,希望文章能够帮你解决java – Spring 4 MVC验证不起作用 – BindingResult hasErrors为false所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。