首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spring ()中使用WebTestClient?

如何在Spring ()中使用WebTestClient?
EN

Stack Overflow用户
提问于 2022-02-15 11:10:20
回答 2查看 188关注 0票数 0
代码语言:javascript
复制
@SpringBootTest(properties = "spring.mvc.servlet.path=/test/path")
@AutoConfigureMockMvc
public class MyTest {
   @Autowired
   private WebTestClient webTestClient

   @Test
   public void test() {
       webTestClient.post()
                .uri(URL)
                .bodyValue(json)
                .exchange()
                .expectStatus().isOk()
                .expectBody(String.class)
                .returnResult()
                .getResponseBody();
   }
}

@RestController
public class MyController {    
    @PostMapping
    public Object post(HttpServletRequest req) {
        System.out.println(req.getServletPath()); //always empty in tests
    }
}

这将创建一个发送到MockHttpServletRequest servlet的@RestContoller

问题:我的servlet使用HttpServletRequest.getServletPath(),但是使用上面的WebTestClient方法它总是空的。

问:如何在junit测试中显式地设置servletPath

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-15 12:43:43

我可以按以下方式解决这个问题,但由于这真的很麻烦,我仍然希望找到一个适当的解决方案。

代码语言:javascript
复制
@TestConfiguration
static class ServletPathMockConfiguration {
    @Bean
    public Filter filter() {
        return (request, response, filterchain) -> {
            Object req = request;
            while (req instanceof ServletRequestWrapper) {
                req = ((ServletRequestWrapper) req).getRequest();
            }
            
            if (req instanceof MockHttpServletRequest)
                ((MockHttpServletRequest) req).setServletPath("/junit/mock/path");

            filterchain.doFilter(request, response);
        };
    }
}
票数 0
EN

Stack Overflow用户

发布于 2022-10-18 12:16:48

一个解决方案是计算路径:request.getServletPath() returned null from Spring MVC

为我做了这份工作,在测试和刺激的时候。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71125443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档