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

Jersey配置@Consumes后Postman发XML请求仍报不支持媒体类型错误如何解决

问题解决步骤

1. 修正language实体类的语法和JAXB规范错误

你现有实体类存在多处不符合Java规范和JAXB要求的问题,直接导致XML反序列化失败:

  • 修正拼写错误:publuc改为public,属性类型string改为首字母大写的String
  • 修正Getter方法命名:按照Java Bean规范,getlang改为getLang,和Setter命名保持一致,JAXB默认通过Getter/Setter匹配XML节点
  • 可选:在Getter上显式添加@XmlElement注解明确映射关系
    修正后的代码示例:
@XmlRootElement
public class Language { // 建议类名首字母大写符合Java规范,根节点默认匹配你现有请求的<language>标签
   private String lang;

   @XmlElement(name = "lang")
   public String getLang(){
      return lang;
   }
   public void setLang(String lang){
      this.lang = lang;
   }
}

2. 添加Jersey XML绑定依赖

Jersey 2.x及以上版本默认不内置XML序列化/反序列化的实现,需要手动引入相关依赖:
如果使用Maven管理依赖,在pom.xml中添加如下配置:

<!-- Jersey JAXB 支持 -->
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-jaxb</artifactId>
    <version>你的Jersey版本号</version>
</dependency>

如果使用JDK 9及以上版本,由于JDK默认移除了JAXB模块,还需要额外添加JAXB实现依赖:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
    <scope>runtime</scope>
</dependency>

3. 修正接口返回值适配XML序列化

你当前接口返回类型为JSONObject,Jersey默认的MessageBodyWriter不支持将JSONObject序列化为XML格式,会导致序列化报错。建议修改为自定义带@XmlRootElement注解的响应类,示例如下:

@XmlRootElement
public class ApiResponse {
    private String code;
    private String msg;
    // 自定义其他响应字段
    // 添加对应Getter、Setter,可标注@XmlElement明确映射关系
}

然后将接口返回值改为ApiResponse类型即可。如果必须使用JSONObject,需要自行实现支持JSONObject转XML的MessageBodyWriter并注册到Jersey容器。

4. 验证Postman请求配置

确认请求的以下配置:

  • 请求方法为POST
  • 请求头Content-Type值严格为application/xml,无多余空格或特殊字符
  • 请求体XML格式合法,标签闭合正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:54:05