时间: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);
}
}
答案 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
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
最新评论