Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring服务层中使用HttpServletRequest_Java_Spring_Spring Mvc - Fatal编程技术网

Java 在Spring服务层中使用HttpServletRequest

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控制器方法。

环境:

SpringMVC3

角JS

雄猫6

问题:

我们正在将一个遗留应用程序从
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技术变得更加困难。

如果我们希望更精细地访问请求对象,如获取/设置请求/会话属性,如果我们想要对请求对象进行更细粒度的访问,比如获取/设置请求/会话属性,那么上述方法将非常困难