【问题标题】:Alternatives for HttpServletRequest and HttpServletResponse in MicronautMicronaut 中 HttpServletRequest 和 HttpServletResponse 的替代方案
【发布时间】:2019-04-26 15:08:36
【问题描述】:

我正在玩 Micronaut,我目前想念的是访问 HttpServletRequestHttpServletResponse。这些通常允许访问以下内容:

  • 请求参数
  • 输入/输出流(尤其是直接写入输出流)
  • 获取/设置 cookie
  • 获取/设置标题
  • 获取客户端 IP

我也不确定以下的替代方案:

  • @RequestParam files: List<MultipartFile>
  • @RequestBody myClass: MyClass

【问题讨论】:

  • io.micronaut.http.HttpRequest
  • 我注意到了,但我没有找到正确获取我描述的所有内容的方法。
  • io.micronaut.http.FullHttpRequest...?
  • 是的,但它既没有 InputStream,也没有 FullHttpResponse 上的 OutputStream。
  • "输入/输出流(尤其是直接写入输出流)" 返回一个反应流来实现这一点。 Micronaut 是非阻塞的,因此不会像在 servlet 世界中那样使用流

标签: java kotlin micronaut


【解决方案1】:

https://docs.micronaut.io/latest/guide/index.html#requestResponsehttps://docs.micronaut.io/latest/guide/index.html#binding 展示了如何绑定到请求参数、cookie、标头等。

https://docs.micronaut.io/latest/guide/index.html#uploads 展示了如何处理文件上传。

输入/输出流(尤其是直接写入输出流)

Micronaut 的做法不同,因此您无法访问要写入的流。您可以返回一个响应式类型,以便您的数据在可用时立即推送到响应中。

获取客户端IP

通常可通过主机标头或https://docs.micronaut.io/latest/api/io/micronaut/http/HttpRequest.html#getRemoteAddress--

编辑:发送分块的 XML 文件

@Get(uri = "/xml", produces = MediaType.TEXT_XML)
Flowable<String> getXml() {
    return Flowable.create(emitter -> {
        emitter.onNext("<<xml header>>");
        //do some work
        emitter.onNext("more xml");
        emitter.onNext("<<xml footer>>");
    }, BackpressureStrategy.BUFFER);
}

【讨论】:

  • 输入/输出流的处理方式有何不同?你能举出具体的例子吗?
  • @Vojtěch 你能举一个具体的例子来说明你想发送什么吗?
  • 例如,我想发送部分 XML 文件,从 xml 标头开始,而不是一些正文部分,完成后,发送 XML 页脚。
  • @Vojtěch 我添加了一个例子
【解决方案2】:

【讨论】:

  • 谢谢,我已经设法找到@Body 注释,@QueryValue 我以前知道并且不是我的问题的一部分。然而,问题的其余部分仍未得到解答。
  • 会给你详细的实现
【解决方案3】:

您可以使用Filter 来使用 HTTP 请求/响应

@Singleton
public class TraceService {

Flowable<Boolean> yourFilter(HttpRequest<?> request) {

Micronaut HTTP 服务器支持以与传统 Java 应用程序中的 Servlet 过滤器类似但反应式的方式将过滤器应用于请求/响应处理的能力。

过滤器提供支持以下用例的能力:

装饰传入的HttpRequest

修改传出的 HttpResponse

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多