Java Spring MVC forward/redirect POST request using interceptor(Java Spring MVC使用拦截器转发/重定向POST请求)
本文介绍了Java Spring MVC使用拦截器转发/重定向POST请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个Spring MVC应用程序,允许用户通过以下调用添加/删除收藏夹:
POST /api/users/123/favorites/456
(将项目456添加为用户123的收藏)DELETE /api/users/123/favorites/456
(将项目456作为用户123的收藏删除)
我还想支持以下两个执行完全相同操作的呼叫(假设用户123已登录):
POST /api/users/me/favorites/456
DELETE /api/users/me/favorites/456
我已经创建了一个拦截器,如下所示:
public class UserMeInterceptor extends HandlerInterceptorAdapter{
public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler ) throws Exception{
Integer userId = AccessControlUtil.getUserId();
String redirectUrl = request.getContextPath() + request.getRequestURI().replace( "/me/", "/" + userId + "/" );
if( redirectUrl.endsWith( "/me" ) ){
redirectUrl = redirectUrl.replace( "/me", "/" + userId );
}
response.sendRedirect( redirectUrl );
response.flushBuffer();
return false;
}
}
此方法非常有效,但仅适用于GET请求。有什么方法可以转发/重定向POST请求并维护所有已发布的数据和方法类型?理想情况下,我希望重用已定义的相同控制器来处理传入ID时的情况。
推荐答案
此方法如何:
@RequestMapping("/api/users/{userId}/favorites/{favoriteId}")
public String clientsByGym(@PathVariable("userId") String userId, @PathVariable("favoriteId") Long favoriteId) {
Integer theUserId = null;
if("me".equals(userId)) {
theUserId = AccessControlUtil.getUserId()
} else {
theUserId = Integer.valueOf(userId);
}
...
}
基本上,让您的方法接受UserID的字符串,从那里您可以确定它是‘me’还是一个实际的UserID值。通过这种方式,您不必处理重定向。如果您必须一直这样做,您可以创建一个帮助器方法,如下所示:
public Integer getUserId(String userId) {
return "me".equals(userId) ? AccessControlUtil.getUserId() : Integer.valueOf(userId);
}
这篇关于Java Spring MVC使用拦截器转发/重定向POST请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Java Spring MVC使用拦截器转发/重定向POST请求
基础教程推荐
猜你喜欢
- 降序排序:Java Map 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01