我正在玩Micronaut,我目前错过的是访问HttpServletRequest和HttpServletResponse。这些通常允许访问以下内容:
HttpServletRequest
HttpServletResponse
我也不确定是否有其他选择:
@RequestParam files: List<MultipartFile>
@RequestBody myClass: MyClass
jdzmm42g1#
https://docs.micronaut.io/latest/guide/index.html#requestResponse 和https://docs.micronaut.io/latest/guide/index.html#binding展示了如何绑定到请求参数、cookie、标头等。https://docs.micronaut.io/latest/guide/index.html#uploads 展示了如何处理文件上传。输入/输出流(特别是直接写入输出流)Micronaut做的事情不同,所以你不能访问要写入的流。你可以返回一个React类型,以便在数据可用时将其推送到响应中。正在获取客户端IP通常可通过主机标头或www.example.com获得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); }
f0brbegy2#
@RequestBody -〉@Body(https://docs.micronaut.io/latest/guide/index.html#bodyAnnotation)@RequestParam -〉@QueryValuehttps://micronaut-projects.github.io/micronaut-spring/latest/guide/index.html
p3rjfoxz3#
您可以使用过滤器来使用HTTP请求/响应
@Singleton public class TraceService { Flowable<Boolean> yourFilter(HttpRequest<?> request) {
Micronaut HTTP服务器支持以与传统Java应用程序中的Servlet过滤器类似但React式的方式将过滤器应用于请求/响应处理的能力。筛选器提供支持以下使用情形的能力:传入HttpRequest的修饰修改传出的HttpResponse
bvpmtnay4#
结果我今晚被这个问题困住了,但有一个办法可以解决。创建一个存储HttpHeaders属性的通用Bean。
public class HttpHeaderHolder { private HttpHeaders headers; public HttpHeaderHolder() { } public HttpHeaders getHeaders() { return headers; } public void setHeaders(HttpHeaders headers) { this.headers = headers; } }
一旦你有了这个,创建一个工厂,创建一个该类的RequestScoped bean。
@Factory public class HttpHeaderFactory { @Bean @RequestScope public HttpHeaderHolder requestHeaders() { return new HttpHeaderHolder(); } }
现在,您可以创建一个Filter,它注入了这个bean,然后可以从请求中注入头。
@Filter("/**") public class SomeFilter implements HttpFilter { @Inject private HttpHeaderHolder instance; @Override public Publisher<? extends HttpResponse<?>> doFilter(HttpRequest<?> request, FilterChain chain) { instance.setHeaders(request.getHeaders()); return chain.proceed(request); } }
现在你有了一个bean,你可以注入到任何地方来获取当前请求的头部。它似乎可以工作,因为过滤器会拦截请求,并在到达控制器之前将HttpHeaders推入bean。
4条答案
按热度按时间jdzmm42g1#
https://docs.micronaut.io/latest/guide/index.html#requestResponse 和https://docs.micronaut.io/latest/guide/index.html#binding展示了如何绑定到请求参数、cookie、标头等。
https://docs.micronaut.io/latest/guide/index.html#uploads 展示了如何处理文件上传。
输入/输出流(特别是直接写入输出流)
Micronaut做的事情不同,所以你不能访问要写入的流。你可以返回一个React类型,以便在数据可用时将其推送到响应中。
正在获取客户端IP
通常可通过主机标头或www.example.com获得https://docs.micronaut.io/latest/api/io/micronaut/http/HttpRequest.html#getRemoteAddress--
编辑:发送分块的XML文件
f0brbegy2#
@RequestBody -〉@Body(https://docs.micronaut.io/latest/guide/index.html#bodyAnnotation)
@RequestParam -〉@QueryValue
https://micronaut-projects.github.io/micronaut-spring/latest/guide/index.html
p3rjfoxz3#
您可以使用过滤器来使用HTTP请求/响应
Micronaut HTTP服务器支持以与传统Java应用程序中的Servlet过滤器类似但React式的方式将过滤器应用于请求/响应处理的能力。
筛选器提供支持以下使用情形的能力:
传入HttpRequest的修饰
修改传出的HttpResponse
bvpmtnay4#
结果我今晚被这个问题困住了,但有一个办法可以解决。
创建一个存储HttpHeaders属性的通用Bean。
一旦你有了这个,创建一个工厂,创建一个该类的RequestScoped bean。
现在,您可以创建一个Filter,它注入了这个bean,然后可以从请求中注入头。
现在你有了一个bean,你可以注入到任何地方来获取当前请求的头部。它似乎可以工作,因为过滤器会拦截请求,并在到达控制器之前将HttpHeaders推入bean。