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
相关产品推荐
相关产品推荐

