gpt4 book ai didi

java - Spring 4 MVC 验证不工作 - BindingResult hasErrors 是 false

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:13 25 4
gpt4 key购买 nike

我正在对 Spring Controller 的 post 方法进行单元测试(使用 org.springframework.test.web.servlet.MockMvc),当表单中存在验证错误时,我试图确认这一点它会通过检查 BindingResult.hasErrors 方法将 View 发送回表单。

这是我的测试

  @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属性绑定(bind)的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;
}


}

和 Controller 方法

  @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";
}

对于此测试,应该执行 return "api/filter";,但 hasErrors() 始终为 false。我也尝试过以下

  @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() 仍然是 false

编辑

经过更多挖掘后,我对此进行了排序,它还需要上下文配置 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26993364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com