Micronaut:如何将HTTP请求头绑定为控制器的Map<String,String>参数?
Micronaut 请求头绑定为 Map<String,String> 参数的实现方案
一、使用Micronaut内置注解实现
Micronaut提供了@Header注解,支持直接将所有请求头绑定到Map<String,String>类型的参数上,效果类似Spring Boot的@RequestHeader。
接口定义(保持原有通用结构)
interface IUser<T> { T createUser( Map<String, String> headers, String userName ); }
控制器实现类(添加@Header注解)
在实现类的headers参数上添加@Header注解(无需指定具体头名称,默认绑定所有请求头):
import io.micronaut.http.HttpResponse; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; import io.micronaut.http.annotation.Header; import io.micronaut.http.annotation.PathVariable; @Controller("/users") public class UserController implements IUser<HttpResponse<String>> { @Get("/{userName}") @Override public HttpResponse<String> createUser( @Header Map<String, String> headers, // 绑定所有请求头到Map @PathVariable String userName ) { // 示例:输出请求头 headers.forEach((key, value) -> System.out.printf("Header: %s = %s%n", key, value)); return HttpResponse.ok("User processed: " + userName); } }
二、自定义注解实现(可选)
如果需要自定义注解封装请求头绑定逻辑,可按以下步骤操作:
1. 创建自定义绑定注解
使用Micronaut的@Bindable注解标记自定义注解,指定绑定来源为请求头:
import io.micronaut.core.bind.annotation.Bindable; import java.lang.annotation.*; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Bindable(source = Bindable.BindingSource.HEADER) public @interface RequestHeadersMap { }
2. 在控制器中使用自定义注解
在实现类的参数上使用自定义注解即可完成绑定:
import io.micronaut.http.HttpResponse; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; import io.micronaut.http.annotation.PathVariable; @Controller("/users") public class UserController implements IUser<HttpResponse<String>> { @Get("/{userName}") @Override public HttpResponse<String> createUser( @RequestHeadersMap Map<String, String> headers, // 使用自定义注解绑定请求头 @PathVariable String userName ) { // 业务逻辑处理 return HttpResponse.ok("User processed: " + userName); } }
内容的提问来源于stack exchange,提问作者CaptainKarthick
相关产品推荐
相关产品推荐

