当前位置: 首页 > 知识库问答 >
问题:

在Spring RestTemplate和ResponseEntity中设置状态代码301或303

丁正阳
2023-03-14

我创建了一个GET服务来重定向到使用POST的网页。我正在尝试使用restTemboard,因为有了它,我可以发送请求服务的正文和标头,并且我已经实现了从服务中获取我需要的信息。

然而,我需要重定向到具有POST服务的服务器,但我不能,因为我不知道如何设置状态代码,我将其重定向到另一台服务器。

这些是我正在使用的函数:

RequestEntity<Object> req = new RequestEntity<Object>(body, httpHeaders, HttpMethod.POST, url);

ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, req, String.class);

共有1个答案

宋奇希
2023-03-14

您可以这样做,因为超文本传输协议帖子不会在Spring自动重定向。所以以下可能会有所帮助:

 public ResponseEntity<String> getData() {
 final RestTemplate restTemplate = new RestTemplate();
 String url = "http://localhost:8080/my-sample-post-url";
 final HttpComponentsClientHttpRequestFactory factory =
     new HttpComponentsClientHttpRequestFactory();
 final HttpClient httpClient = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build(); //org.apache.httpcomponents 
 factory.setHttpClient(httpClient);
 restTemplate.setRequestFactory(factory);
 Map<String, String> params = new HashMap<String, String>();
 ResponseEntity<String> response = restTemplate.postForEntity(url,params,String.class);
 if(response.getStatusCode().equals(HttpStatus.OK)) {
   return new ResponseEntity<String>(HttpStatus.SEE_OTHER);
 }
 else {
    return new ResponseEntity(HttpStatus.NOT_FOUND); // for example only
 }

 }

注意:Lax RedirectStrategy实现自动重定向所有HEAD、GET、POST和DELETE请求。此策略放宽了HTTP规范对POST方法自动重定向的限制。这里有更多

 类似资料:
  • 我想要得到一个漂亮而简单的带有设置状态代码的API,并获得swagger(swashbuckle)的文档 首先,我的控制器是这样的: 很好,Swagger显示了JSON格式的结果。问题是,我不能设置状态代码(比如,如果database-error我可以设置为err500或s.th.)。 null null 现在,状态代码设置正确,但swagger没有显示任何结果。 所以,我想这可能是个大摇大摆的问

  • HTTP 和< code>308状态代码有什么区别? > (永久移动):此请求和所有将来的请求都应定向到给定的URI。 (永久重定向):应该使用另一个URI重复请求和所有未来的请求。 他们似乎很相似。

  • 问题内容: 我有一个API调用,我需要对其进行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过适当的凭据,则需要返回401状态。如果他们尚未发送受支持的请求格式,则需要返回400状态。 因为它是一个API,所以我真正想做的就是设置响应状态并以一条简单的愚蠢消息退出,该消息说明请求失败的原因(可能使用)。刚好足以完成工作,但我还无法使其正常工作。我

  • 本文向大家介绍HTTP 状态码 301和302的区别?相关面试题,主要包含被问及HTTP 状态码 301和302的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址

  • TLDR;如何使用Spring在正文中发送文本消息以及304状态代码? 背景 我正在使用Spring Boot编写一个REST API。在某些endpoint中,我想返回: 任一状态 ,身体, 或状态 未修改,正文 我的endpoint使用(在kotlin中)的方式如下: 问题 每当我用状态代码创建< code>ResponseEntity时!= 200,正文不发(空正文)。将< code>Htt

  • 我们在前端使用OpenWeb js库,它们需要.NET中间层在发生某些类型的错误时向它们发送特定的HTTP头状态代码。我试图做到这一点: 它有点半途而废。看截图:http状态码 http://zerogravpro.com/temp/pic.png 请注意,我在响应标头中实现了状态码400,但我确实需要请求标头中的400。相反,我得到了“200 OK”。我如何实现这一点? 我用于进行调用的 URL