gpt4 book ai didi

spring - MockMvc虽然servlet映射过滤到达@Controller类

转载 作者:行者123 更新时间:2023-12-02 11:03:07 25 4
gpt4 key购买 nike

我是 Spring 新手,这是我在 Stack Overflow 上的第一个问题,我的英语也很基础...

我目前正在关注 http://spring.io/guides/tutorials/web/3/我不明白为什么 MvcMock 可以执行 get("/bbb") 并到达我的 Controller (映射到 @RequestMapping("/bbb")) AbstractAnnotationConfigDispatcherServletInitializerDispatcherSevlet 映射限制为 new String[] { "/aaa"};?

这是涉及的代码...

Spring WebAppInitializer

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { PersistenceConfig.class, CoreConfig.class };
}

@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebConfig.class };
}

@Override
protected String[] getServletMappings() {
return new String[] { "/aaa" };
}

@Override
protected Filter[] getServletFilters() {

CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[] { characterEncodingFilter };
}
}

Spring Controller

@Controller
@RequestMapping("/bbb")
public class SiteController {

private static final Logger LOG = LoggerFactory.getLogger(SiteController.class);

@Autowired
private MenuService menuService;

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String getCurrentMenu() {
...
}

以及通过的 JUnit 测试

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = { PersistenceConfig.class, CoreConfig.class, WebConfig.class })
public class WebDomainIntegrationTest {

private static final String STANDARD = "Yummy Noodles";
private static final String CHEF_SPECIAL = "Special Yummy Noodles";
private static final String LOW_CAL = "Low cal Yummy Noodles";

private MockMvc mockMvc;

@Autowired
WebApplicationContext webApplicationContext;

@Before
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}

@Test
public void thatTextReturned() throws Exception {
mockMvc.perform(get("/bbb")).andDo(print()).andExpect(content().string(containsString(STANDARD)))
.andExpect(content().string(containsString(CHEF_SPECIAL))).andExpect(content().string(containsString(LOW_CAL)));

}

}

非常感谢您的帮助!

劳伦特

最佳答案

欢迎来到 Stackoverflow!这是一个很好的第一个问题。

答案是您的 MockMvc 配置未使用您的 WebAppInitializerThis currently isn't supported by the Spring MVC test suite.请注意您还没有在任何地方注册。您所做的就是设置上下文配置

@ContextConfiguration(classes = { PersistenceConfig.class, CoreConfig.class, WebConfig.class })

有了这个

@WebAppConfiguration

MockMvc 将在您的上下文中向 @Controller 类(以及它查找的其他内容)注册一个 DispatcherServlet。然后它将使用该配置运行测试。该配置中没有 /aaa。所有路径都是绝对路径,因为它们在您的 @Controller 类中声明。

关于spring - MockMvc虽然servlet映射过滤到达@Controller类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19344394/

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