2011-10-09 43 views
0

有没有办法访问服务中的当前响应?我需要这个来删除过期的Facebook的cookie ...从RequestContextHolder访问响应

我知道如何访问当前请求:

RequestContextHolder.currentRequestAttributes().getRequest() 

不乏有反应,但。

回答

1

服务不应该知道http,因为它只是一个具有实用方法的Groovy(有时是Java)类。但是,由于您很可能是从可以访问的控制器调用它,因此可以从Web层中的请求中提取信息并将其传递到服务层进行处理。

+0

嗯,我真的不相信“纯粹的一切”如果我有一个替代其中a)我必须将http数据传递给se上的所有方法服务层,甚至是那些不明显的地方,这是必需的,或者b)仅仅让Facebook服务访问当前处理的请求的cookie并从那里提取所有数据,然后我实际上选择b)。 – julkiewicz

+0

这就是为什么我是从控制器到handlerInterceptor抽象通信AWAY的忠实粉丝。 业务逻辑应该只处理构建和返回'资源';我想说,现代架构中的格式化和安全检查可以被删除,因为通信层需要处理转发/重定向,这也可以是外部服务(即代理,消息队列)的共同责任。 通过抽象通信,我们能够更好地共享共享IO流的其他架构服务(即请求/响应)的功能和数据, – Orubel

0

我同意@Burt的一般说法,但是有像上面评论中提到的@julkiewicz这样的情况,你必须访问一个cookie,并且不想传递所有的信息(特别是如果cookie是在许多中间层不需要)。我发现这两个选项是低于(第一是清洁的,但我不知道是否WebUtils优于RequestContextHolder,或可能反过来。

WebUtils.retrieveGrailsWebRequest().request.cookies 

RequestContextHolder.requestAttributes.request.request.request.cookies 

我不知道为什么有这么多嵌套的request对象,但我证实了这一点对我来说,在Grails 2.4.2。