gpt4 book ai didi

java - Jersey JAX-RS 中的可选路径段

转载 作者:行者123 更新时间:2023-12-02 04:20:55 24 4
gpt4 key购买 nike

我已经为此搜索了几个小时,但还没有完全正确。

我正在开发的项目中的 API 没有版本控制 (/controller/blah),因此我们想引入版本控制。例如,我们有一个与之关联的 @Path("/controller") 类。当然,为了避免 API 损坏,现在必须支持 //v1/,因此以下内容是有效的:

/controller/blah
/v1/controller/blah

我觉得一定有一个简单的解决方案可以解决我所缺少的问题?

提前致谢!

最佳答案

我将使用过滤器来重定向那些与特定模式匹配的请求(在您的情况下/v1/*)。

您的过滤器应如下所示:

@WebFilter(filterName = "MyCustomFilter")
public class MyCustomFilter implements Filter {

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
try {
String url = ((HttpServletRequest)arg0).getRequestURI();
//Take into account thet the url here would be the complete url. I just put an example taking into account
//your application name is JAX-RS_tutorial
String redirect = url.substring("/JAX-RS_tutorial/v1".length(), url.length());
arg0.getRequestDispatcher(redirect).forward(arg0, arg1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new ServletException(e);
}

}

@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}

然后在web.xml上:

<filter>
<filter-name>MyCustomFilter</filter-name>
<filter-class>com.myapplication.filter.MyCustomFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyCustomFilter</filter-name>
<url-pattern>/v1/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/api/*</url-pattern>
<url-pattern>/v1/api/*</url-pattern>
</servlet-mapping>

更新

实际上,您只需要为您的servlet-mapping 添加新的url-pattern。所以只需要web.xml:

<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/api/*</url-pattern>
<url-pattern>/v1/api/*</url-pattern>
</servlet-mapping>

关于java - Jersey JAX-RS 中的可选路径段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32773874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com