Quarkus中HttpHeaders无法正常使用问题求助
解决方案
问题根源
你的代码混用了Spring Web注解与JAX-RS API,且未正确标记参数来源,导致RESTEasy Reactive无法识别HttpHeaders的注入方式,同时误将无注解的smell参数判定为QUERY类型,引发转换器缺失异常。
修复方案(统一使用Spring Web API)
调整代码,完全使用Spring Web规范定义接口,避免与JAX-RS API混用:
package org.acme.spring.web; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @RestController public class GreetingController { @PostMapping( value = "/post", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE ) public ResponseEntity<String> allParams( @RequestBody String smell, // 若参数来自查询参数则改为@RequestParam @RequestHeader HttpHeaders headers ) { // 可直接通过headers对象操作请求头,例如headers.get("Authorization") return ResponseEntity.ok("OK"); } }
关键调整点
- 用Spring的
ResponseEntity替换JAX-RS的Response,保持Spring Web生态一致性; - 将JAX-RS的
@Produces/@Consumes替换为@PostMapping的consumes/produces属性; - 为无注解的
smell参数添加@RequestBody(请求体参数)或@RequestParam(查询参数),明确参数来源; - 保留
@RequestHeader HttpHeaders注入方式,Spring Web原生支持直接注入完整请求头对象。
备选方案(使用JAX-RS原生API)
若倾向使用Quarkus原生的JAX-RS规范,可改用JAX-RS注解与API:
package org.acme.spring.web; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @Path("/") public class GreetingController { @POST @Path("/post") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public Response allParams( @QueryParam("smell") String smell, @Context HttpHeaders headers // JAX-RS原生的HttpHeaders注入方式 ) { return Response.ok("OK").build(); } }
依赖检查
若使用Spring方案,确保项目已正确引入Quarkus Spring Web扩展:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-spring-web</artifactId> </dependency>
内容的提问来源于stack exchange,提问作者Amritendu De
相关产品推荐
相关产品推荐

