将POST请求从一个REST API转发/重定向到另一个REST API - Thinbug

将POST请求从一个REST API转发/重定向到另一个REST API

时间:2016-12-21 15:30:36

标签: rest redirect post spring-boot

[

](https://www.googleadservices.com/pagead/aclk?nis=1&sa=L&ai=C4g3aioCoYbqbB9iH2wSXpZyQCKrbrpxm992s8rQOr4G649cCEAEg9cz8emCdAaAB47jT7wHIAQmoAwHIA8sEqgTxAU_Qkh0P7y_AlGn8_LJEnZ9qXQx24dikgV776syqtBBf3oOscQq8nevV-flnaVjg1eY8-OrhkGDNRYRulyxkc-8W6mi97zh3N0tbcs91ZGF8IBxtgMQTFDJem_F7AoCXaIE3cckm4e3bNCvBVec8Bhq5yr37kOihgt2G4pyhWP6QCwMYO88Q6tTLkIppr4PfOJv5IZjq4MyBNGlsFLCPlDcwU3zAgmE6dk0fCs5bxel5hcdlX1MaWpCcnPsjYwV1TVsK6bcL2x6xhtS9RnCsRdrTZqjq4Y8TWn-DfNhWwPj7edaXEUgJAWx4T6XtycWDy1bABKyR4tn3A6AGLoAHrLLokQKoB47OG6gHk9gbqAfulrECqAf-nrECqAfVyRuoB6a-G6gH89EbqAeW2BuoB6qbsQKoB9-fsQLYBwDSCAcIgGEQARgfsQnxC8yzY5PPE4AKAZgLAcgLAYAMAbgMAcoMCgi-qIee5NqeqzO4E4gn2BMM0BUBgBcB&ae=1&num=1&cid=CAASEuRoSQOHLsC7hsvZDvmMhbc1yg&sig=AOD64_3_efEoeJyGuUybLV9E87MWyEP1bg&client=ca-pub-6263610230477973&nb=9&adurl=https://www.keyence.com.cn/landing/microscope/lp_ed_bz-x_confocal.jsp%3Faw%3Dgagooglekcmicrobzls21090101)

[无需暗室的基恩士荧光
显微镜](https://www.googleadservices.com/pagead/aclk?nis=1&sa=L&ai=C4g3aioCoYbqbB9iH2wSXpZyQCKrbrpxm992s8rQOr4G649cCEAEg9cz8emCdAaAB47jT7wHIAQmoAwHIA8sEqgTxAU_Qkh0P7y_AlGn8_LJEnZ9qXQx24dikgV776syqtBBf3oOscQq8nevV-flnaVjg1eY8-OrhkGDNRYRulyxkc-8W6mi97zh3N0tbcs91ZGF8IBxtgMQTFDJem_F7AoCXaIE3cckm4e3bNCvBVec8Bhq5yr37kOihgt2G4pyhWP6QCwMYO88Q6tTLkIppr4PfOJv5IZjq4MyBNGlsFLCPlDcwU3zAgmE6dk0fCs5bxel5hcdlX1MaWpCcnPsjYwV1TVsK6bcL2x6xhtS9RnCsRdrTZqjq4Y8TWn-DfNhWwPj7edaXEUgJAWx4T6XtycWDy1bABKyR4tn3A6AGLoAHrLLokQKoB47OG6gHk9gbqAfulrECqAf-nrECqAfVyRuoB6a-G6gH89EbqAeW2BuoB6qbsQKoB9-fsQLYBwDSCAcIgGEQARgfsQnxC8yzY5PPE4AKAZgLAcgLAYAMAbgMAcoMCgi-qIee5NqeqzO4E4gn2BMM0BUBgBcB&ae=1&num=1&cid=CAASEuRoSQOHLsC7hsvZDvmMhbc1yg&sig=AOD64_3_efEoeJyGuUybLV9E87MWyEP1bg&client=ca-pub-6263610230477973&nb=0&adurl=https://www.keyence.com.cn/landing/microscope/lp_ed_bz-x_confocal.jsp%3Faw%3Dgagooglekcmicrobzls21090101)

[搭载高灵敏度光学系统,可在低损伤、
无猝灭条件下实现高清晰度观察-免费
下载设备参考资料!](https://www.googleadservices.com/pagead/aclk?nis=1&sa=L&ai=C4g3aioCoYbqbB9iH2wSXpZyQCKrbrpxm992s8rQOr4G649cCEAEg9cz8emCdAaAB47jT7wHIAQmoAwHIA8sEqgTxAU_Qkh0P7y_AlGn8_LJEnZ9qXQx24dikgV776syqtBBf3oOscQq8nevV-flnaVjg1eY8-OrhkGDNRYRulyxkc-8W6mi97zh3N0tbcs91ZGF8IBxtgMQTFDJem_F7AoCXaIE3cckm4e3bNCvBVec8Bhq5yr37kOihgt2G4pyhWP6QCwMYO88Q6tTLkIppr4PfOJv5IZjq4MyBNGlsFLCPlDcwU3zAgmE6dk0fCs5bxel5hcdlX1MaWpCcnPsjYwV1TVsK6bcL2x6xhtS9RnCsRdrTZqjq4Y8TWn-DfNhWwPj7edaXEUgJAWx4T6XtycWDy1bABKyR4tn3A6AGLoAHrLLokQKoB47OG6gHk9gbqAfulrECqAf-nrECqAfVyRuoB6a-G6gH89EbqAeW2BuoB6qbsQKoB9-fsQLYBwDSCAcIgGEQARgfsQnxC8yzY5PPE4AKAZgLAcgLAYAMAbgMAcoMCgi-qIee5NqeqzO4E4gn2BMM0BUBgBcB&ae=1&num=1&cid=CAASEuRoSQOHLsC7hsvZDvmMhbc1yg&sig=AOD64_3_efEoeJyGuUybLV9E87MWyEP1bg&client=ca-pub-6263610230477973&nb=7&adurl=https://www.keyence.com.cn/landing/microscope/lp_ed_bz-x_confocal.jsp%3Faw%3Dgagooglekcmicrobzls21090101)

基恩士

打开

[

](https://www.googleadservices.com/pagead/aclk?nis=1&sa=L&ai=C4g3aioCoYbqbB9iH2wSXpZyQCKrbrpxm992s8rQOr4G649cCEAEg9cz8emCdAaAB47jT7wHIAQmoAwHIA8sEqgTxAU_Qkh0P7y_AlGn8_LJEnZ9qXQx24dikgV776syqtBBf3oOscQq8nevV-flnaVjg1eY8-OrhkGDNRYRulyxkc-8W6mi97zh3N0tbcs91ZGF8IBxtgMQTFDJem_F7AoCXaIE3cckm4e3bNCvBVec8Bhq5yr37kOihgt2G4pyhWP6QCwMYO88Q6tTLkIppr4PfOJv5IZjq4MyBNGlsFLCPlDcwU3zAgmE6dk0fCs5bxel5hcdlX1MaWpCcnPsjYwV1TVsK6bcL2x6xhtS9RnCsRdrTZqjq4Y8TWn-DfNhWwPj7edaXEUgJAWx4T6XtycWDy1bABKyR4tn3A6AGLoAHrLLokQKoB47OG6gHk9gbqAfulrECqAf-nrECqAfVyRuoB6a-G6gH89EbqAeW2BuoB6qbsQKoB9-fsQLYBwDSCAcIgGEQARgfsQnxC8yzY5PPE4AKAZgLAcgLAYAMAbgMAcoMCgi-qIee5NqeqzO4E4gn2BMM0BUBgBcB&ae=1&num=1&cid=CAASEuRoSQOHLsC7hsvZDvmMhbc1yg&sig=AOD64_3_efEoeJyGuUybLV9E87MWyEP1bg&client=ca-pub-6263610230477973&nb=8&adurl=https://www.keyence.com.cn/landing/microscope/lp_ed_bz-x_confocal.jsp%3Faw%3Dgagooglekcmicrobzls21090101)

我希望实现一种将POST请求从一个SpringBoot应用程序直接转发到另一个SpringBoot应用程序的方法。转发GET请求很简单,下面的代码显示了当我懒洋洋地尝试重新使用相同的重定向路径时如何得到405错误。

我已经查看了StackOverflow上的现有示例(最值得注意的是here),但我甚至无法获得编译的解决方案。任何人都可以建议修改下面的代码,让我只通过?

重定向整个POST请求

@RestController
public class Routing {

    @Autowired
    private RoutingDelegate routingDelegate;

    @RequestMapping(value="/**", method=RequestMethod.GET, produces=MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<String> catchAll(HttpServletRequest request, HttpServletResponse response){
        return routingDelegate.redirect(request, response);
    }

    @RequestMapping(value="/**", method=RequestMethod.POST, produces=MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<String> catchAllPost(HttpServletRequest request, HttpServletResponse response){
        /**
         * This returns a 405 error, which is understandable since I'm redirecting a POST request to a GET endpoint
         */
        return routingDelegate.redirect(request, response);
    }
}
@Service
public class RoutingDelegate {

    private final String baseServerUrl = "http://localhost:8080";

    public ResponseEntity<String> redirect(HttpServletRequest request, HttpServletResponse response){
        try {
            String queryString = request.getQueryString();
            String redirectUrl = baseServerUrl + request.getRequestURI() +
                    (queryString != null ? "?" + queryString : "");
            response.sendRedirect(redirectUrl);
        }
        catch (IOException e) {
            return new ResponseEntity<String>("REDIRECT ERROR", HttpStatus.INTERNAL_SERVER_ERROR);
        }
        return new ResponseEntity<String>("", HttpStatus.OK);
    }
}

1 个答案:

答案 0 :(得分:2)

我暂时解决了这个问题,以防万一有人感兴趣:

@Service
public class RoutingDelegate {

    private final String baseServerUrl = "http://localhost:8080";

    public ResponseEntity<String> redirectPost(HttpServletRequest request, HttpServletResponse response){
        String responseString = "";
        try {
            // build up the redirect URL
            String queryString = request.getQueryString();
            String redirectUrl = baseServerUrl + request.getRequestURI() +
                    (queryString != null ? "?" + queryString : "");

            responseString = forwardPostRequest(redirectUrl, request);
        }
        catch (Exception e) {
            return new ResponseEntity<String>("REDIRECT ERROR", HttpStatus.INTERNAL_SERVER_ERROR);
        }
        return new ResponseEntity<String>(responseString, HttpStatus.OK);
    }

    private String forwardPostRequest(String url, HttpServletRequest request){
        String responseString = "";
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

        // rebuild map from params
        MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
        for (Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
            String key = entry.getKey();
            String[] values = entry.getValue();
            map.add(key, values[0]);
        }

        HttpEntity<MultiValueMap<String, String>> newRequest = new HttpEntity<MultiValueMap<String, String>>(map, headers);

        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> responseEntity = restTemplate.postForEntity( url, newRequest , String.class );
        responseString = responseEntity.getBody();
        return responseString;
    }
}

原网址: 访问
创建于: 2021-12-02 16:15:45
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论