java - 如何在 Spring 中重写请求 URI 和路径变量?

标签 java spring spring-mvc

我现在正在使用 Spring 4,并且我有一个定义如下的 Controller :

@RequestMapping(value = "/{id}/definitions", method = RequestMethod.PUT)
@ResponseBody
public List<ResponseDTO> update(@PathVariable(value = "id") String id,
                                HttpServletRequest iRequest) throws Exception 
{ ... }

我期望收到一个加密的“id”字符串,该字符串作为请求本身的路径变量的一部分。但我需要做的是重写这个请求 URI 并将其解密为另一个值(例如整数),并仅使用原始 URI 和转换/解密的值形成另一个 HTTP 请求。

如何获取整个 URI 并用整数替换 {id}?

例如,如果传入的原始请求如下所示:

http://mycompany.com/my-service/kjAISOhalkjZjakmbbb/definitions

我想转换上下文路径之后的所有内容:

/kjAISOhalkjZjakmbbb/definitions

至:

/123456/definitions 

最后,我可以向另一个服务发出一个请求,如下所示:

http://mycompany.com/my-service-2/123456/definitions

谢谢!

最佳答案

解密该值(无论您如何执行)。 然后只需使用重定向或转发(在您的情况下可能是转发):

@RequestMapping(value = "/{id}/definitions", method = RequestMethod.PUT)
public void update(@PathVariable(value = "id") String id,
                            HttpServletRequest iRequest) throws Exception { 
    String decryptedId = //decrypt here
    //Do whatever else

    //either forward: or redirect:
    return "forward:my-service-2/" + decryptedId + "/definitions";
}

关于java - 如何在 Spring 中重写请求 URI 和路径变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36074508/

相关文章:

hibernate - H2 数据库 c3p0 代理与 hibernate 。无法加载 driverClass org.h2.Drive

java - Eclipse 3.8.1 中的奇怪行为

如果不启用 "show console",Java Web Start 不会启动我的 .jar

java - 方法 getHomeworkSum() 返回最新的作业值,而不是总和

java - 如何在 Spring Boot 中国际化 API 错误?

java - 是否可以通过openid协议(protocol)认证印度不公平aadhar

spring - JPA @Entity 中的 Bean 注入(inject)

java - Redis集群配置

java - Maven 项目在 mac 中由于缺少tools.jar而无法编译

java - 如何查看@ComponentScan扫描的类路径列表以解决NoSuchBeanDefinitionException