【问题标题】:HttpMediaTypeNotAcceptableException when specifying applicaiton/xml in Accept header在 Accept 标头中指定 application/xml 时出现 HttpMediaTypeNotAcceptableException
【发布时间】:2013-07-10 22:58:24
【问题描述】:

抱歉,我没有看到 java-noob 的标签。

我在 Spring 中使用现有的 restful api。我的任务是添加一个带有几个实用方法的新 api,每个方法都返回一个字符串。到目前为止,一切都很好。一切运作良好。

我添加了一个简单的包装器以将字符串作为对象返回,并且我能够构建/部署/测试并返回我的响应,看起来像

{ id: "12345" }

如果我指定 Accept 标头 = application/xml 我得到以下异常:

org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示

这个包中的其他方法似乎可以在 xml 和 json 中序列化。我没有看到控制器库中使用了任何自定义序列化代码,我不知道它在哪里处理(或者它是否甚至与序列化有关)。 有人可以帮我弄清楚从哪里开始寻找吗?

这是我的 [简化] 控制器:

@Controller
public class UtilController extends ControllerBase
{

    @XmlRootElement(name="util_response")
    public static class UtilResponse extends APIResponseBase
    {
        private String id;

        @XmlElement(name="id")
        public String getId()
        {
            return id;
        }

        public void setId(String id)
        {
            this.id = id;
        }
    }

    @RequestMapping(value = "/{pid}/util/output", method = RequestMethod.GET)
    @ResponseBody
    public UtilResponse output(HttpServletResponse httpResponse,
            @PathVariable("pid") int pid,
            @RequestParam(value = "id", required=true) String id) throws Exception
    {
            UtilResponse utilResponse = new UtilResponse();
            utilResponse.setId(id);
            return utilResponse;
    }
}

我还尝试更新 @RequestMapping 并添加了 produces = "application/xml"(是的,显然不知道这到底是做什么的),但效果为零。

说真的,我对所有这些 java 东西如何“工作”(.net dev by trade)真的很陌生,并且很想了解更多。我不知道Jackson 是什么,但我在我们的项目中没有看到对它的引用,其他一切似乎都有效,所以请不要回复说“你为什么不直接使用 Jackson?”我也有最后期限,所以有时只是让它工作优先。

【问题讨论】:

    标签: java spring spring-mvc xml-serialization


    【解决方案1】:

    请不要回复说“你为什么不直接使用 Jackson?

    没有人会这么说。杰克逊是为JSON ;)

    produces = "application/xml" ...,但效果为零

    produces 将处理程序方法限制为提供的类型。所以produces="application\xml" 使得该方法对于期望JSON 的请求不可用,例如它不会改变方法的结果。

    您对问题的描述表明 Spring 无法找到将UtilResponse 序列化为XML 的方法。最可能的原因是类路径中不存在JAXB2。 Spring 默认使用它来创建XML

    【讨论】:

    • 谢谢,这让我走上了正轨。我在 servlet-context.xml 中添加了<beans:value>....UtilController$UtilResponse</beans:value>,它的效果很神奇!
    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 2011-07-15
    • 2013-05-14
    • 2011-04-08
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多