Eclipse转ReST项目为Maven后Tomcat运行报415 Unsupported Media Type错误
问题原因及修复方案
1. 依赖版本冲突
当前pom中Jersey相关依赖版本不统一:jersey-container-servlet使用2.25.1版本,jersey-hk2使用2.28版本,跨版本混用会导致Jersey的参数解析、媒体类型匹配逻辑异常,这是项目转为Maven后才出现问题的核心诱因之一。
修复方案:将所有Jersey组件的版本统一,建议统一使用2.25.1版本,删除单独引入的jersey-hk2依赖即可,2.25.1版本的jersey-container-servlet已经包含适配的hk2实现,无需额外引入。
2. POST接口缺失请求媒体类型声明
当前POST接口仅声明了返回的媒体类型@Produces,没有声明可接收的请求媒体类型。使用@FormParam接收表单参数时,对应的请求Content-Type为application/x-www-form-urlencoded,必须显式在POST方法上添加@Consumes(MediaType.APPLICATION_FORM_URLENCODED)注解,否则Jersey无法匹配对应请求的媒体类型,就会返回415错误。
修改后的接口代码示例:
@POST @Produces(MediaType.TEXT_HTML) @Consumes(MediaType.APPLICATION_FORM_URLENCODED) // 新增该注解 @Path("/inputvalues") public String getParamText(@FormParam("travel") String travel, @FormParam("start") String start, @FormParam("duration") String end, @FormParam("party") String people) { // 原有逻辑保持不变 }
3. 可选排查项
完成上述两步后仍报错,可按顺序检查:
- 确认web.xml中Jersey Servlet的
jersey.config.server.provider.packages初始化参数值包含RestWeb类所在的包路径,保证接口能被正常扫描注册 - 确认index.jsp中form表单的
enctype属性没有被误设为multipart/form-data或application/json,普通表单提交默认就是application/x-www-form-urlencoded,无需额外修改 - 确认请求路径符合Jersey Servlet映射规则:比如web.xml中Jersey Servlet的url-pattern为
/rest/*,完整请求路径应为{上下文路径}/rest/error/inputvalues
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

