当前位置: 首页 > 知识库问答 >
问题:

未找到将POJO列表序列化为JSON的MessageBodyWriter

黄聪
2023-03-14

返回类型为@product(MediaType.APPLICATION_XML)时,我创建了一个REST服务,该服务可以正常工作,但当我指定@product(MediaType.APPLICATION_JSON)时,我会收到以下错误消息:

找不到应用程序的messagewriter=json/bodytype=json。util。ArrayList,genericType=java。util。列表

我已经尝试过了:添加jersey media jackson和jersey jackson moxy,但没有成功。

环境:我使用Glassfish 4.1.1作为应用服务器,使用Netbeans 8.2作为IDE。

还有一点需要补充的是,我不使用网络。xml,我正在使用一个应用程序类来配置其余的资源。

以下是我的课程:

@XmlRootElement( name = "Node")
public class Sensor implements Serializable{
    protected int nwkAddr;
    protected DeviceType deviceType;
    protected String modelIdentifier;
    protected IEEEAddress ieeeAddr;
    protected String name;
    protected int parentNwkAddr;
    protected int appVersion;
    protected int manufacturerCode;
    protected List<EndPoint> endPoints;
    protected List<Link> links;
    protected transient List<Binding> bindings;
    protected transient int linkQuality;
    protected transient int reason;

    // constructors, getters and setters follow...

}

这是我的服务(我正在调用getSensors()方法):

@Path("sensors") 
public class SensorsResources {

    @Context
    private UriInfo context;

    @Path("zplugs")
    public ZplugResource getZplugResource(){
        return new ZplugResource();
    }

    @Path("zrcs")
    public ZrcResource getZrcResource(){
        return new ZrcResource();
    }

    @GET
    @Produces({MediaType.APPLICATION_JSON})
    public List<Sensor> getSensors(){
        System.out.println("getSensors");   
        return NodeBdd.getListOfMyNodes();
    }
}

这是一个我使用静态属性的类,只是为了模拟数据。

public class NodeBdd {
    private static List<Sensor> listOfMyNodes = new ArrayList<>();

    static{
        listOfMyNodes.add(new Sensor(1, DeviceType.COORDINATOR, "modelidentifier1", IEEEAddress.NULL_IEEE_ADDR, "UBEE", 0, 0, 0, null, null, null, 0, 0));
        listOfMyNodes.add(new Sensor(2, DeviceType.END_DEVICE, "modelidentifier2", IEEEAddress.UNKNOWN_IEEE_ADDR, "ZPLUG", 1, 1, 1, null, null, null, 1, 1));
        listOfMyNodes.add(new Sensor(3, DeviceType.END_DEVICE, "modelidentifier3", IEEEAddress.UNKNOWN_IEEE_ADDR, "ZRC", 2, 2, 2, null, null, null, 2, 2));
        listOfMyNodes.add(new Sensor(4, DeviceType.END_DEVICE, "modelidentifier4", IEEEAddress.UNKNOWN_IEEE_ADDR, "ZPLUG", 4, 4, 4, null, null, null, 4, 4));
        listOfMyNodes.add(new Sensor(5, DeviceType.END_DEVICE, "modelidentifier5", IEEEAddress.UNKNOWN_IEEE_ADDR, "ZRC", 5, 5, 5, null, null, null, 5, 5));
    }

    public static List<Sensor> getListOfMyNodes() {
        return listOfMyNodes;
    }

    public static List<Sensor> getSpecificListOfNodes(String type){
        List<Sensor> specificList = new ArrayList<>();

        for (Sensor current : listOfMyNodes) {
            if(type.equalsIgnoreCase(current.getName())){
                specificList.add(current);
            }
        }

        return specificList;
    }
}

共有1个答案

柯子琪
2023-03-14

我设法通过以下解决方案解决了这个问题:使用jackson库而不是moxy。

我把它留在这里,以防其他人也面临同样的问题。

 类似资料:
  • 问题内容: 我正在客户端和Django服务器之间发送信息,并且我想对此使用JSON。我正在发送简单的信息-字符串列表。我尝试使用,但是当我这样做时, 看来这只能用于Django对象。如何序列化简单的Python对象? 问题答案: 你可以使用纯Python执行此操作:

  • 我有一个POJO类,它将从JSON反序列化,JSON在Spring中作为请求体出现。此POJO类包含列表 我的JSON对象如下所示 下面是示例方法调用 我遵循了给出的建议,下面给出了反序列化程序代码

  • 我需要将一个pojo序列化成不同的json结构,这取决于我发送请求的对象。此外,我应该能够在一些配置中配置pojo字段如何映射到给定请求的json属性。 这可以用杰克逊来实现吗?是否有一些库或API可以做到这一点? 编辑:例如: 上面是我创建动态json需要的两个对象,下面是一些转换的例子

  • 问题内容: 我想在Play2中将Scala对象列表反序列化为JSON映射-我说这是JSON的一个非常简单的用例。我的JSON输出如下所示: 为此,我正在看Play2的JSON文档 “ The Play JSON library” 。对我来说,他们的例子非常琐碎,我已经证实它们对我有用。因此,我能够正确地反序列化单个对象。 但是,当我阅读文档时,在Play2中制作包含JSON列表的映射似乎有些冗长。

  • 问题内容: 我在Web API项目中使用了Dictionary,该项目的序列化方式类似于JSON: 因为我有重复的键,所以我不能再使用Dictionary类型,而现在我正在使用 但这是以这种方式序列化的: 有没有办法像字典一样进行序列化? 谢谢。 问题答案: 如果您使用Newtonsoft Json.NET库,则可以执行以下操作。 定义一个转换器,以所需的方式写入键/值对的列表: 然后使用转换器:

  • 有人能帮助我,我如何反序列化下面的JSON,我不能改变?我正在使用Jackson进行序列化。 列可以具有未知数量的标题及其值,例如,“Header1”用于行数组中。 到目前为止,我有以下结构: 问题是当我反序列化成QueryResult时映射是空的;我了解TypeReference,但不知道如何指定TypeReference 编辑: 我的对象映射器代码如下: queryResultString的内