我在Spring Boot应用程序中有以下类:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.google.common.net.HttpHeaders;
@Controller
public class TestController {
@RequestMapping("foo")
public ResponseEntity<?> redirectOnGet() {
return ResponseEntity.status(HttpStatus.FOUND).header(HttpHeaders.LOCATION, "http://www.bbc.co.uk").build();
}
}
当我通过GET请求调用它时,我得到一个200 OK的回复,其中包含BBC的HTML源代码。co.uk公司。因此,似乎正在遵循重定向。
根据HTTP规范第10.3.3节:
如果收到302状态码以响应GET或HEAD以外的请求,则除非用户能够确认,否则用户代理不得自动重定向该请求
此外,它还专门针对非GET响应,并不规定GET请求应该重定向。因此,尽管在某些情况下它可能会有所帮助,但在这里,我不想避免这种重定向。
查看SimpleClientHttpRequest estFactory
,这可能是我可以解决问题的地方。但是在覆盖类之后
这里有一个项目说明了这个问题:https://github.com/LTheobald/StackOverflow31266409
测试用例可能是最有趣的东西。基于MockMVC的方法实现了我的预期,而基于RestTemplate的方法没有实现。这是因为RestTemplate设置为遵循重定向,而TestRestTemplate(我假设MockMVC使用)不遵循重定向。那么,在调用控制器时,如何让我的应用程序更像TestRestTemplate呢?
关于可能重复的注意事项:如何防止Spring MVC执行重定向。这个问题没有包含足够的信息来说明为什么要重定向。最初的海报可能只是返回了“重定向:某些东西”,Spring会做正确的事情。
刚刚尝试在Boot示例项目中重现此问题,但无法(使用Spring Boot 1.2.4和1.3.0. M1)。
➜ curl -v http://localhost:8080/foo
> GET /foo HTTP/1.1
> User-Agent: curl/7.37.1
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: Apache-Coyote/1.1
< Location: http://www.bbc.co.uk
< Content-Length: 0
< Date: Wed, 08 Jul 2015 20:27:41 GMT
<
您可以分享一些关于Spring MVC Web配置的更多信息吗?您使用的是哪个servlet容器?
注意:您的示例中有一个错字,您导入了HttpHeaders
的错误实现。
您的控制器正在返回有效的HTTP 302响应。现在由HTTP客户机来处理该响应。如果您查看SimpleClientHttpRequestFactory,如果您不使用另一个RestTemplate(Apache httpComponents,Netty 4,OkHttp)配置RestTemplate,那么它是默认的。默认情况下,此RequestFactory遵循GET请求的重定向。
因此,有两种解决方案:
我对使用Selenium是新手,在Selenium Grid 2中使用RemoteWebDriver时遇到了一些问题。我想知道我的代码出了什么问题。谢谢 我分3步设置RemoteWebDriver: > 将Chrome驱动程序设置为系统属性,我检查了路径是否正确 设置功能 通过RemoteWebDriver打开驱动程序 结果通过前两步,但在最后一步失败,因为日志没有显示。似乎在设置RemoteWe
我最近在论坛上问了一个问题,为什么ExecutorService在获得期货后阻止了我的程序:ExecutorService和Future阻止了主线程 问题是,经过大量的调试,有罪的线不是未来。get()但是
在我的Espresso测试执行和AlertDialog会被提示并等待用户响应。Espresso测试只有在我按下“Accept”按钮但我想测试代替用户执行此事件时才会继续。 我注意到我的线程选项卡上有以下状态
问题内容: 当try块中存在时,我对try- finally执行感到困惑。据我了解,finally块将始终执行,即在返回调用方法之前。在考虑以下简单代码时: 实际打印的结果为1。这是否意味着不执行finally块?有人可以帮我吗? 问题答案: 从块返回时,返回值存储在该方法的堆栈帧中。之后,将执行finally块。 更改finally块中的值不会更改堆栈中已存在的值。但是,如果您从finally块
问题内容: 我有一棵divs树: 在div上单击时,将使其子级不可见-即单击“ a”将使“ b”和“ c”不可见。 问题是:单击“ b”将调用“ a”的单击,并使“ b”和“ c”不可见。如何使用jQuery禁用对“ a”的点击? 谢谢 问题答案: 您可以为孩子添加一个处理程序,以防止click事件蔓延: 这样一来,点击不会传播到。都不会单击以转到,因此也不会。
我使用的是带有以下Maven依赖项的swagger: 我编写了一个API调用,如下所示: 我在网上查看了一下,但我找不到一组好的例子,说明如何在swagger for java中正确设置所需参数,也找不到一个描述java版本细微差别的API。 所以我的问题是——如何正确设置所需的参数,以便它们仍然可以通过昂首阔步的用户界面执行?