1

抱歉,我没有看到 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,但我在我们的项目中没有看到对它的引用,其他一切似乎都有效,所以请不要回复说“你为什么不直接使用杰克逊?” 我也有最后期限,所以有时只是让它工作优先。

4

1 回答 1

2

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

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

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

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

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

于 2013-07-11T06:56:39.180 回答