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

spring mvc rest服务重定向/转发/代理

钱嘉致
2023-03-14
@Controller
@RequestMapping("/movie")
public class MovieController {

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public @ResponseBody Movie getMovie(@PathVariable String id, @RequestBody user) {

    return dataProvider.getMovieById(user,id);

}

我尝试使用RestTemplate进行新调用:例如:

@Controller
@RequestMapping("/movieProxy")
public class MovieProxyController {

    private String address= "http://xxx.xxx.xxx.xxx:xx/MyApp";

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public @ResponseBody Movie getMovie(@PathVariable String id,@RequestBody user,final HttpServletResponse response,final HttpServletRequest request) {

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.exchange( address+ request.getPathInfo(), request.getMethod(), new HttpEntity<T>(user, headers), Movie.class);

}

这是可以的,但我需要重写控制器中的每个方法来使用RESTTemplate。此外,这会导致代理计算机上的冗余序列化/反序列化。

我尝试使用restemplate编写一个泛型函数,但没有成功:

@Controller
@RequestMapping("/movieProxy")
public class MovieProxyController {

    private String address= "http://xxx.xxx.xxx.xxx:xx/MyApp";

    @RequestMapping(value = "/**")
    public ? redirect(final HttpServletResponse response,final HttpServletRequest request) {        
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.exchange( address+ request.getPathInfo(), request.getMethod(), ? , ?);

}

共有1个答案

席烨
2023-03-14

您可以使用以下命令镜像/代理所有请求:

private String server = "localhost";
private int port = 8080;

@RequestMapping("/**")
@ResponseBody
public String mirrorRest(@RequestBody String body, HttpMethod method, HttpServletRequest request) throws URISyntaxException
{
    URI uri = new URI("http", null, server, port, request.getRequestURI(), request.getQueryString(), null);

    ResponseEntity<String> responseEntity =
        restTemplate.exchange(uri, method, new HttpEntity<String>(body), String.class);

    return responseEntity.getBody();
}
 类似资料:
  • 问题内容: 是否可以将JAX-RS Web服务重定向到另一个网页? 就像您使用Servlet一样。 JAX-RS Web服务本身应该重定向。如果相关,我正在使用RESTEasy。 问题答案: 是的,如果您的返回类型是(或) https://eclipse- ee4j.github.io/jersey.github.io/apidocs/1.19.1 ,则可以在Jersey或任何JAX- RS实现(

  • 我只有很少的spring boot微服务,它们是通过云环境部署到JBoss的。这些引导服务是在Eureka服务器中注册自己的Eureka客户端。下面是一个例子: 它用user-regn-service-app Eureka主页的名称向Eureka注册应用程序 wildfly服务器在8080处运行,而user-regn-service-app部署在上下文路径/user-regn-service-ap

  • /////////////////////个人控制器///////////////////////////////// ///////////////////个人/////////////////////////////////// ///////////////////PersondaoImpl/////////////////////////// /////////////人(模型)/////

  • 我有一个本地网站。该网站由docker compose创建,正在本地主机端口3000上侦听。 当我尝试时: 我能看到回应。 我所做的: 从我的域提供商处,我编辑了DNS以指向我的服务器,然后我更改了nginx入口: 我创建了服务: 但无论是否有服务,我都会收到错误信息,即503服务暂时不可用。 如何使用nginx入口指向本地TCP服务?

  • 主要内容:请求转发,重定向,2. 通过 ModelAndView 实现重定向Spring MVC 是对 Servlet 的进一步封装,其本质就是一个 Servlet,因此在 Spring MVC 中也存在转发和重定向的概念。 在 Spring MVC 中,我们可以在逻辑视图名中通过“forward:”和“redirect:”两个关键字来表示转发和重定向。 请求转发 我们可以在控制器方法指定逻辑视图名(View Name)时,使用“forward:”关键字进行请求转发操作。

  • 本文向大家介绍java转发和重定向的区别,包括了java转发和重定向的区别的使用技巧和注意事项,需要的朋友参考一下 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL