Java Spring MVC使用拦截器转发/重定向POST请求

原学程将引见Java Spring MVC应用拦阻器转收/重定向POST要求的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

Java Spring MVC使用拦截器转发/重定向POST请求 教程 第1张

成绩描写

我有1个Spring MVC运用法式,许可用户经由过程以下挪用添减/增除珍藏夹:

    POST /api/users/一二三/favorites/四五六(将项目四五六添减为用户一二三的珍藏)

    DELETE /api/users/一二三/favorites/四五六(将项目四五六作为用户一二三的珍藏增除)

我借想支撑以下二个履行完整雷同操纵的吸喊(假定用户一二三已登录):

    POST /api/users/me/favorites/四五六

    DELETE /api/users/me/favorites/四五六

我曾经创立了1个拦阻器,以下所示:

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’照样1个现实的UserID值。经由过程这类方法,您不用处置重定向。假如您必需一向如许做,您不妨创立1个赞助器办法,以下所示:

public Integer getUserId(String userId) { 
 return "me".equals(userId) ? AccessControlUtil.getUserId() : Integer.valueOf(userId);
}

佳了闭于Java Spring MVC应用拦阻器转收/重定向POST要求的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。