Многомерные массивы с Jettison - PullRequest
0 голосов
/ 17 октября 2018

Я использую Jaxb и Jettison (изначально с Resteasy) для сериализации объекта в json.Один из моих объектов, которые я пытаюсь сериализовать, включает в себя двухмерный массив.Как я могу настроить Jettison для создания многомерного массива в json?

Вот пример, который генерирует многомерный массив:

public class Example {
    @XmlRootElement("test")
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Tester {

        int[][] stuff;
    }

    public static void main(String[] args) throws JAXBException {
        Tester tester = new Tester();

        tester.stuff = new int[][]{{1, 2}, {3, 4}};

        StringWriter writer = new StringWriter();

        Configuration config = new Configuration();
        MappedNamespaceConvention con = new MappedNamespaceConvention(config);
        MappedXMLStreamWriter xmlStreamWriter = new MappedXMLStreamWriter(con, writer);

        Marshaller marshaller = JAXBContext.newInstance(Tester.class)
                .createMarshaller();

        marshaller.marshal(tester, xmlStreamWriter);

        System.out.println(writer.toString());
    }
}

, который выводит следующее:

{"tester":{"stuff":[{"item":[1,2]},{"item":[3,4]}]}}

Но я хочу вывести массив stuff в виде многомерного массива json, например:

{"tester":{"stuff":[[1,2],[3,4]]}}

Это представляется возможным, потому что Resteasy сериализует этот путь из коробки.

1 Ответ

0 голосов
/ 17 октября 2018

После того, как вы покопались в Resteasy, узнайте, что он использует Джексона при использовании провайдера json по умолчанию в Jboss.Для справки этот код дает желаемый результат:

public class Example {
    @XmlRootElement("test")
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Tester {

        int[][] stuff;
    }

    public static void main(String[] args) throws JAXBException {
        Tester tester = new Tester();

        tester.stuff = new int[][]{{1, 2}, {3, 4}};

        StringWriter writer = new StringWriter();

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JaxbAnnotationModule());

        System.out.println(objectMapper.writeValueAsString(tester));
    }
}
...