疑难解答JAXBUnmarshalException:意外的流结束(RESTeasy)

时间:2013-07-27 06:58:09

标签: json java-ee jaxb jax-rs resteasy

如果有人可以帮助我制定修复以下错误的策略,我将不胜感激,这种错误无法辨别;大多数时候没有错误,我在90%的时间里都很成功:

ERROR [org.jboss.resteasy.core.SynchronousDispatcher]  Failed executing POST /toys/customer25/insert
org.jboss.resteasy.plugins.providers.jaxb.JAXBUnmarshalException: Unexpected end of stream

如何将此错误简单地记录到控制台?我想捕获此方法正在接收的JSON并找出导致此错误的原因。我可以在服务器日志中看到它。

我正在做的是以JSON格式将Toy个对象的数组发布到服务器。也就是说,在客户端上,我将Toy对象转换为Toy JSON。我发送的字符串是这样的:[{"toyName":"buzzlightyear", "toyMaker":"mattel"}]

我的理解是,当我将JSON POST到jax-rs restful服务时,jax-rs实现(我正在使用RESTeasy 1.2)将以某种方式自动将该JSON字符串转换为java Toy对象。 / p>

用于处理插入Toy对象的POST的Java JAX-RS restful服务的代码是:

@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.TEXT_PLAIN})
@Path("toy/{customer}/insert")
public String insertToys(@PathParam("customer") String customer, List<Toy> toys);

如何记录/捕获JSON字符串的错误?在我看来,当调用insertToys()方法时,系统正在处理JSON到Toy对象的转换。因此,弄清楚如何调试是很难的。

有人可以为我制定策略吗?我传递格式错误的JSON的可能性有多大,可能来自某些未转义的角色? Vs映射实体错了吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您的JSON不正确。 该方法接受List,因此您必须发送玩具对象数组:

[{"toyName":"buzzlightyear", "toyMaker":"mattel"}]

(注意括号)。

更多对象:

[{"toyName":"buzzlightyear", "toyMaker":"mattel"},{"toyName":"rex", "toyMaker":"mattel"}]