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

关于JWT响应所需javax.ws.rs MediaType及@Produces注解使用的技术问询

关于JWT响应的MediaType问题解答

嘿,我来帮你理清这个JWT和MediaType的问题~

1. JWT响应对应的javax.ws.rs MediaType

JWT的标准媒体类型是application/jwt,不过在javax.ws.rs.core.MediaType类里并没有预先定义这个常量,所以你有两种实用的选择:

  • 直接在代码里使用字符串常量 "application/jwt"
  • 自己定义一个静态常量统一引用,让代码更规范,比如:
public static final String APPLICATION_JWT = "application/jwt";

2. 解决@Produces("application/jwt")的报错问题

你碰到的"No message body writer has been found"错误,本质是JAX-RS框架找不到能把你的JWT对象序列化为application/jwt类型响应的消息体写入器,这里有两种解决方案:

方法一:自定义MessageBodyWriter

你可以实现javax.ws.rs.ext.MessageBodyWriter接口,专门处理JWT的序列化逻辑。举个基于JJWT库的简单示例:

@Provider
@Produces("application/jwt")
public class JwtMessageBodyWriter implements MessageBodyWriter<String> {

    @Override
    public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
        return String.class.isAssignableFrom(type) && mediaType.equals(MediaType.valueOf("application/jwt"));
    }

    @Override
    public long getSize(String jwt, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
        return -1; // 交给容器自动计算响应长度
    }

    @Override
    public void writeTo(String jwt, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException {
        entityStream.write(jwt.getBytes(StandardCharsets.UTF_8));
    }
}

别忘了加上@Provider注解,这样JAX-RS框架会自动识别并使用这个写入器。

方法二:用JSON格式返回JWT(更省心的替代方案)

如果不想自定义写入器,也可以直接用application/json类型返回JWT,把JWT字符串包装在JSON对象里,比如:

@GET
@Path("/token")
@Produces(MediaType.APPLICATION_JSON)
public Response getJwtToken() {
    String jwt = "生成好的JWT字符串";
    return Response.ok(Map.of("token", jwt)).build();
}

这种方式不需要额外配置,直接就能运行,也是很多实际项目里常用的JWT返回方式。


内容的提问来源于stack exchange,提问作者Raveen Athapaththu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:08:17