道歉,我没有看到java-noob的标签。
我在Spring工作了一个现有的restful api。我的任务是添加一个带有几个实用程序方法的新api,每个方法返回一个字符串。到现在为止还挺好。一切都运作良好。
我添加了一个简单的包装器来将字符串作为对象返回,我可以构建/部署/测试,然后我回复我的响应,看起来像
{ id: "12345" }
如果我指定Accept header = 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
是什么,但我在项目中没有看到它的引用,其他一切似乎都有效,所以请不要回答“你为什么不用杰克逊?”我也有截止日期,所以有时只是让它工作优先。
答案 0 :(得分:2)
请不要回答“你为什么不用杰克逊?
没有人会这么说。杰克逊是JSON
;)
produce =“application / xml”...,但效果为零
produces
将处理程序方法限制为提供的类型。因此produces="application\xml"
使该方法对于期望JSON
的请求不可用,例如它不会改变方法的结果。
您对问题的描述表明Spring无法找到将UtilResponse
序列化为XML
的方法。最可能的原因是类路径中不存在JAXB2
。 Spring使用它作为默认创建XML
。