1、问题现象
java.lang.RuntimeException: java.lang.IllegalArgumentException: invalid start or end
2、原因分析
先定位到报错的HeaderParser类。
任何一步一步往前面的类查看,到达HttpURLConnection类,该类是去请求http,并处理相关的响应逻辑,报错的原因所在也是在这。如图所示,当响应码为401,并且响应头有WWW-Authenticate则最终会走向HeaderParser.parse()。
3、解决方法
接口返回header不带WWW-Authenticate或者设置WWW-Authenticate为null即可。
4、测试代码
TestController
@RestController
public class TestController {
@GetMapping("/test")
public void test1(HttpServletResponse response) {
response.setStatus(401);
response.addHeader("WWW-Authenticate", "");
}
}
TestControllerTests
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TestControllerTests {
@Autowired
private RestTemplate restTemplate;
@Test
public void test() {
restTemplate.getForObject("http://127.0.0.1:8080/test", Object.class);
}
}