【问题标题】:Spring boot/Spring MVC - How to forward a response from another requestSpring Boot/Spring MVC - 如何转发来自另一个请求的响应
【发布时间】:2016-12-05 20:14:45
【问题描述】:

我需要一个响应为 HTML 的休息端点。但不是在我的项目中定义的视图,我想转发来自该休息端点内发出的另一个请求的 HTML 响应。 例如,我的休息端点向内部服务发出 http 请求并返回从该服务返回的 HTML?可能吗?有什么想法吗? 这是一个代码示例

@RequestMapping("/test")
public String testMe(Model model, @RequestParam("param1") String param1, @RequestParam("param2") String param2)
{
    //Make a Http call to an internal service and return the response from that call
    return "<RESPONSE_FROM_THAT_CALL>";
}

我想从内部服务返回 HTML 响应

【问题讨论】:

  • 那么你的问题是如何返回一个字符串?
  • 如果我返回一个字符串,spring 会假定它是一个视图的名称并出错。我想返回 HTML 作为响应的一部分
  • HTML 文档是一个字符串,不是吗?如果一个方法用@ResponseBody注解,那么Spring会返回字符串,而不是视图。

标签: spring spring-mvc spring-boot


【解决方案1】:

您可以使用RestTemplate 从其他服务获取结果,然后将其作为String 返回:

@Controller
public class MyController {

    private RestTemplate restTemplate = new RestTemplate();

    @ResponseBody
    @RequestMapping("/test")
    public String testMe(Model model, @RequestParam("param1") String param1, @RequestParam("param2") String param2) {
        URI uri = UriComponentsBuilder.fromHttpUrl("http://www.example.com");
            .queryParam("param1", param1)
            .queryParam("param2", param2)
            .build()
            .toUri());
        return restTemplate.getForObject(uri, String.class);
    }
}

如果您想要代理到另一个服务的更多端点,您应该考虑使用例如Zuul 作为微代理。参见例如this blog post 解释如何轻松创建这样的代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多