1

如果有人可以帮助我制定解决以下错误的策略,我将不胜感激,该错误以不可辨别的模式发生;大部分时间没有错误,大约 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 并找出导致此错误的原因。我将能够在服务器日志中看到它。

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

我的理解是,当我将 JSON 发布到 jax-rs restful 服务时,jax-rs 实现(我使用的是 RESTeasy 1.2)会以某种方式自动将该 JSON 字符串转换为 javaToy对象。

我在 Java JAX-RS RESTful 服务上处理插入Toy对象的 POST 的代码是这样的:

@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映射实体错了?谢谢!

4

1 回答 1

1

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

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

(注意大括号)。

更多对象:

[{"toyName":"buzzlightyear", "toyMaker":"mattel"},{"toyName":"rex", "toyMaker":"mattel"}]
于 2013-07-27T08:19:45.827 回答