无法让 TestRestTemplate 不遵循重定向

问题描述 投票:0回答:1

我想测试一些返回重定向(302)的端点。 我想使用 TestRestTemplate 来测试它,但我无法让它不自动遵循重定向。我只想得到响应而不发出重定向请求。

文档说,如果 apache 客户端位于类路径上,它应该默认禁用重定向处理,但我发现情况并非如此。

我尝试添加 apache http 客户端作为依赖项或测试依赖项,但它不起作用。

首先,为什么 TestRestTempalte 不像文档建议的那样工作? 其次有什么方法可以配置它工作吗?

我将在这里添加非常简单的示例代码,复制起来非常简单:

@RestController
public class controller {

    @GetMapping(path = "/redirect")
    public void redirect(HttpServletResponse response) throws IOException {
        response.sendRedirect("/test");
    }

    @GetMapping(path = "/test")
    public String test() {
        return "hello";
    }
}
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class redirectTest {

    @Autowired
    TestRestTemplate rest;


    @Test
    void redirectTest() {
        var response = rest.getForEntity("/redirect", String.class);
        System.out.println("Response: " + response.getBody());
        assertEquals(302, response.getStatusCode().value());
    }

}
plugins {
    id 'java'
    id 'org.springframework.boot' version '3.4.0'
    id 'io.spring.dependency-management' version '1.1.6'
}

group = 'example'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.apache.httpcomponents:httpclient:4.3.6'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
    useJUnitPlatform()
}

测试失败,因为它不会自动执行 302 重定向,而是会自动跟随它。

spring http http-redirect spring-test spring-resttemplate
1个回答
0
投票

这里有一个关于此问题的线程:https://github.com/spring-projects/spring-boot/issues/27360

您也可以使用 MockMvc 进行此特定测试。

© www.soinside.com 2019 - 2024. All rights reserved.