我使用的是Jersey 2.10.4和EclipseLink 2.5.2(两者都与GlassFish 4.1捆绑在一起)。我使用MOXy进行JSON(联合国)编组。我希望拥有一个REST Web服务,它可以使用单个资源,也可以使用同一类型的多个资源数组。
由于URL /媒体类型组合的模糊性,不可能使用具有这种签名的两种不同JAX-RS方法(我用通用客户示例替换了我的实际资源/ URL - 此类使用JAXB注释) (A resource model has ambiguous (sub-)resource method for HTTP method POST and input mime-types ...
):
1)
@POST
@Path( "customers" )
@Consumes( { MediaType.APPLICATION_JSON } )
public void addCustomer( Customer newCustomer )
{
[...]
}
2)
@POST
@Path( "customers" )
@Consumes( { MediaType.APPLICATION_JSON } )
public void addCustomers( List<Customer> newCustomers )
{
[...]
}
但如果我只使用两个签名中的一个,我就不能让服务同时接受单个资源元素和元素数组:
如果我使用签名1),当客户端发送数组而不是单个元素时,我得到ClassCastException
这样的Customer cannot be cast to java.util.Collection
。
如果我使用签名2),当客户端发送单个元素而不是数组时,我得到IllegalArgumentException: argument type mismatch
。
我发现this问题告诉我,在杰克逊,有一个功能ACCEPT_SINGLE_VALUE_AS_ARRAY
似乎正好处理这个问题。我无法在MOXy中找到相同的东西,有没有办法实现这个目标?