Java 在Spring服务层中使用HttpServletRequest
环境: SpringMVC3 角JS 雄猫6 问题: 我们正在将一个遗留应用程序从Java 在Spring服务层中使用HttpServletRequest,java,spring,spring-mvc,Java,Spring,Spring Mvc,环境: SpringMVC3 角JS 雄猫6 问题: 我们正在将一个遗留应用程序从struts2迁移到spring-MVC-REST,使用angular JS作为UI。 这是一个典型的水疗中心 典型的应用流程是:Angular JS+弹簧座控制器+服务层 struts2操作中的业务逻辑被移动到服务类中 我的问题是-在Spring中,使HttpServetRequest对象可用于服务类的正确方法是什么 有两种选择: 1) 将HttpServletRequest传递给Spring MVC控制器方法。
struts2
迁移到spring-MVC-REST
,使用angular JS作为UI。
这是一个典型的水疗中心
典型的应用流程是:Angular JS+弹簧座控制器+服务层
struts2操作中的业务逻辑被移动到服务类中
我的问题是-在Spring中,使HttpServetRequest对象可用于服务类的正确方法是什么
有两种选择:
1) 将HttpServletRequest
传递给Spring MVC控制器方法。将相同的HttpServetRequest
传递给Spring服务层。
但这将导致HttpServletRequest
成为服务接口的一部分,如-
public ProductDto getProductDetails(HttpServletRequest req,int productId)
这是正确的方法吗?HttpServletRequest
是否可以作为服务接口的一部分
2) 使用Spring提供的API:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
请对此进行指导?除了上述选项之外,您还可以在服务层中引入一个类或另一个抽象,然后用
HttpServletRequest的必需部分填充它,并在服务层中使用该抽象
例如(借用Spring数据),假设您希望访问页面
、大小
和排序
以及HttpServletRequest
中与用户相关的查询字符串。除了将请求传递给服务层方法之外,还可以将这些参数封装到抽象中,例如,Pageable
或UserFilterCriteria
:
public interface Pageable {
int page();
int size();
List<Sort> sorts();
}
您可以传递这些新的抽象:
public interface UsersService {
List<User> filterUsers(UserFilterCriteria criteria, Pageable pageable);
}
公共接口用户服务{
列出过滤器用户(用户过滤器标准,可分页);
}
通过这种方式,您可以轻松地在与服务层相同的抽象级别上定义抽象。除了上述选项之外,您还可以在服务层中引入一个类或另一个抽象,然后用HttpServletRequest
的必需部分填充它,并在服务层内使用该抽象
例如(借用Spring数据),假设您希望访问页面
、大小
和排序
以及HttpServletRequest
中与用户相关的查询字符串。除了将请求传递给服务层方法之外,还可以将这些参数封装到抽象中,例如,Pageable
或UserFilterCriteria
:
public interface Pageable {
int page();
int size();
List<Sort> sorts();
}
您可以传递这些新的抽象:
public interface UsersService {
List<User> filterUsers(UserFilterCriteria criteria, Pageable pageable);
}
公共接口用户服务{
列出过滤器用户(用户过滤器标准,可分页);
}
通过这种方式,您可以轻松地在与服务层相同的抽象级别上定义抽象。您不应该让HttpServletRequest/-Response成为服务层的一部分,因为HttpServletRequest/-Response是特定于您的用户界面/视图技术的类。
将它们引入您的服务层将使您的服务层依赖于用于用户界面的技术,从而使以后更难更改UI/View技术。您不应该将HttpServletRequest/-Response作为服务层的一部分,因为HttpServletRequest/-Response是特定于用户界面/视图技术的类。
将它们引入您的服务层将使您的服务层依赖于用于用户界面的技术,从而使以后更改UI/View技术变得更加困难。如果我们希望更精细地访问请求对象,如获取/设置请求/会话属性,如果我们想要对请求对象进行更细粒度的访问,比如获取/设置请求/会话属性,那么上述方法将非常困难