You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:18:21