NetBeans开发REST Web应用POST请求返回415错误排查问询
问题根因排查
415状态码本质是服务端无法识别请求携带的媒体类型,结合你提供的代码和配置,问题大概率出在以下几个环节:
- 请求头配置错误
你发送POST请求时未携带Content-Type: application/xml请求头,或是请求头值填错(比如误写为text/xml、application/json),和接口@Consumes("application/xml")声明的接收类型不匹配。这种情况下请求会在JAX-RS路由匹配阶段直接被拦截,不会进入你写的业务方法,因此不会打印业务日志属于正常现象。 - Customer类缺少JAXB序列化注解
Glassfish默认使用JAXB实现XML和Java对象的转换,如果你的Customer类没有加@XmlRootElement注解,服务端找不到对应XML的反序列化处理器,就会返回415。你需要在Customer类上添加注解:
同时如果类字段名和XML标签名不一致(比如你XML里是@XmlRootElement(name = "customer") public class Customer { // 类属性定义 }first-name,类属性是驼峰命名firstName),还需要给对应字段加@XmlElement(name = "first-name")注解做映射。 - JAXB依赖缺失
如果你使用的是JDK11及以上版本,JAXB已经从JDK默认内置模块中移除,需要手动在项目中引入JAXB的API和实现依赖,否则服务端没有处理application/xml类型请求的能力,也会触发415错误。 - JAX-RS路由配置缺失
你当前的web.xml是空配置,需要确认你的Application类已经正确配置了JAX-RS的应用路径,比如Application类上加了@ApplicationPath("/")或者对应前缀的注解,否则请求路由也可能出现异常。
内容的提问来源于stack exchange,提问作者letsCode
相关产品推荐
相关产品推荐

