<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Mon Feb 12 06:57:13 CET 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Magnolia - Issue tracker</title>
    <link>https://jira.magnolia-cms.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>9.4.2</version>
        <build-number>940002</build-number>
        <build-date>19-01-2023</build-date>
    </build-info>


<item>
            <title>[MGNLREST-161] Delivery endpoint can return subnodes as an array</title>
                <link>https://jira.magnolia-cms.com/browse/MGNLREST-161</link>
                <project id="10674" key="MGNLREST">Magnolia REST Framework</project>
                    <description>&lt;p&gt;Create a configuration option to allow subnodes to be returned as an array of nodes&lt;/p&gt;

&lt;p&gt;&lt;b&gt;User story:&lt;/b&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;As a SPA developer, I can get node content returned directly in arrays, so that I can work with content in a familiar and productive way.&#160;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;b&gt;Notes:&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Currently the delivery endpoint returns subnodes directly as properties on the parent node, and then a &apos;@nodes&apos; array which includes the names of all of those properties. While this can have advantages when a developer is trying to access a specific node, (because they can just get it by its name) it makes the usecase of accessing lists of subnodes (such as areas, pages, blocks) harder because it adds a level of indirection. Practically in a React or Angular app this can be awkward. So much so that developers have asked us how to iterate over the nodes.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Acceptance criteria:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;A &#160;way to configure a delivery endpoint to return arrays of subnodes.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;Ideally in a way that also still allows access to &quot;non-list&quot; subnodes by name.&lt;/li&gt;
	&lt;li&gt;Ideally in a way that nodes with two types of children can generate more than one array.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;b&gt;Suggestion:&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Add the ability to define which nodetypes should be returned in arrays. Any node that is not in one of the specified types is still returned as a direct subnode.&lt;/p&gt;

&lt;p&gt;So if I specify:&lt;/p&gt;
&lt;div class=&apos;table-wrap&apos;&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&lt;tt&gt;workspace: website&lt;/tt&gt;&lt;br/&gt;
 &lt;tt&gt;arrays:&lt;/tt&gt;&lt;br/&gt;
 &lt;tt&gt;&#160;&#160;&lt;/tt&gt;&lt;tt&gt;- pages:&lt;/tt&gt;&lt;br/&gt;
 &lt;tt&gt;&#160;&#160;&#160;&#160;&lt;/tt&gt;&lt;tt&gt;nodeType: mgnl:page&lt;/tt&gt;&lt;br/&gt;
 &lt;tt&gt;&#160;&#160;&lt;/tt&gt;&lt;tt&gt;- areas:&lt;/tt&gt;&lt;br/&gt;
 &lt;tt&gt;&#160;&#160;&#160;&#160;&lt;/tt&gt;&lt;tt&gt;nodeType: mgnl:area&lt;/tt&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;Then the content will include a &apos;pages&apos; and &apos;areas&apos; arrays, which includes the subnodes contents. And any subnode NOT included in those arrays will still be included directly on the parent object, and still be listed in the&#160;@nodes array.&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</description>
                <environment></environment>
        <key id="63335">MGNLREST-161</key>
            <summary>Delivery endpoint can return subnodes as an array</summary>
                <type id="2" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10891&amp;avatarType=issuetype">New Feature</type>
                                            <priority id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/neutral.gif">Neutral</priority>
                        <status id="10433" iconUrl="https://jira.magnolia-cms.com/images/icons/statuses/generic.png" description="This issue has been evaluated by development and accepted to be planned in.">Accepted</status>
                    <statusCategory id="2" key="new" colorName="default"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="rgange">Richard Gange</reporter>
                        <labels>
                    </labels>
                <created>Fri, 15 Dec 2017 09:23:33 +0100</created>
                <updated>Mon, 4 Apr 2022 18:57:35 +0200</updated>
                                                                                <due></due>
                            <votes>7</votes>
                                    <watches>5</watches>
                                                                                                                <comments>
                            <comment id="153249" author="rgange" created="Mon, 18 Dec 2017 17:24:20 +0100"  >&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;From:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;{
   &quot;@name&quot;: &quot;0&quot;,
   &quot;@path&quot;: &quot;/jetBlue/header/0&quot;,
   &quot;TrueBlueNrtxt&quot;: &quot;TrueBlue #&quot;,
   &quot;profileLinks&quot;: { *{color:red}//MultiValue Field{color}*
      &quot;@name&quot;: &quot;profileLinks&quot;,
      &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks&quot;,
      &quot;0&quot;: {
         &quot;@name&quot;: &quot;0&quot;,
         &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/0&quot;,
         &quot;linkType&quot;: &quot;external&quot;,
         &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/my-trueblue-home&quot;,
         &quot;LinkText&quot;: &quot;Dashboard&quot;,
         &quot;@nodes&quot;: []
      },
      &quot;1&quot;: {
         &quot;@name&quot;: &quot;1&quot;,
         &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/1&quot;,
         &quot;linkType&quot;: &quot;external&quot;,
         &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/account-info&quot;,
         &quot;LinkText&quot;: &quot;My Profile&quot;,
         &quot;@nodes&quot;: []
      },
      &quot;2&quot;: {
         &quot;@name&quot;: &quot;2&quot;,
         &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/2&quot;,
         &quot;linkType&quot;: &quot;external&quot;,
         &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/activity-history&quot;,
         &quot;LinkText&quot;: &quot;My Activity&quot;,
         &quot;@nodes&quot;: []
      },
      &quot;3&quot;: {
         &quot;@name&quot;: &quot;3&quot;,
         &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/3&quot;,
         &quot;linkType&quot;: &quot;external&quot;,
         &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/our-partners&quot;,
         &quot;LinkText&quot;: &quot;Our Partners&quot;,
         &quot;@nodes&quot;: []
      },
      &quot;4&quot;: {
         &quot;@name&quot;: &quot;4&quot;,
         &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/4&quot;,
         &quot;linkType&quot;: &quot;external&quot;,
         &quot;linkHref&quot;: &quot;https://badges.jetblue.com/&quot;,
         &quot;LinkText&quot;: &quot;My Badges&quot;,
         &quot;@nodes&quot;: []
      },
      &quot;5&quot;: {
         &quot;@name&quot;: &quot;5&quot;,
         &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/5&quot;,
         &quot;linkType&quot;: &quot;external&quot;,
         &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/current-deals&quot;,
         &quot;LinkText&quot;: &quot;CURRENT DEALS&quot;,
         &quot;@nodes&quot;: []
      },
      &quot;6&quot;: {
         &quot;@name&quot;: &quot;6&quot;,
         &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/6&quot;,
         &quot;linkType&quot;: &quot;external&quot;,
         &quot;linkHref&quot;: &quot;https://www.barclaycardus.com/&quot;,
         &quot;LinkText&quot;: &quot;VIEW CREDITS&quot;,
         &quot;@nodes&quot;: []
      },
      &quot;7&quot;: {
         &quot;@name&quot;: &quot;7&quot;,
         &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/7&quot;,
         &quot;linkType&quot;: &quot;external&quot;,
         &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/trueblue-faqs&quot;,
         &quot;LinkText&quot;: &quot;FAQS&quot;,
         &quot;@nodes&quot;: []
      },
      &quot;8&quot;: {
         &quot;@name&quot;: &quot;8&quot;,
         &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/8&quot;,
         &quot;linkType&quot;: &quot;external&quot;,
         &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/c/portal/logout&quot;,
         &quot;LinkText&quot;: &quot;SIGN OUT&quot;,
         &quot;@nodes&quot;: []
      },
      &quot;@nodes&quot;: [
         &quot;0&quot;,
         &quot;1&quot;,
         &quot;2&quot;,
         &quot;3&quot;,
         &quot;4&quot;,
         &quot;5&quot;,
         &quot;6&quot;,
         &quot;7&quot;,
         &quot;8&quot;
      ]
   },
   &quot;@nodes&quot;: [
      &quot;profileLinks&quot;
   ]
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;{
    &quot;@name&quot;: &quot;0&quot;,
    &quot;@path&quot;: &quot;/jetBlue/header/0&quot;,
    &quot;TrueBlueNrtxt&quot;: &quot;TrueBlue #&quot;,
    &quot;profileLinks&quot;: { *{color:red}// MultiValueFiled entires as array in @nodes{color}*
        &quot;@name&quot;: &quot;profileLinks&quot;,
        &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks&quot;,
        &quot;@nodes&quot;: [
            {
                &quot;@name&quot;: &quot;0&quot;,
                &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/0&quot;,
                &quot;linkType&quot;: &quot;external&quot;,
                &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/my-trueblue-home&quot;,
                &quot;LinkText&quot;: &quot;Dashboard&quot;,
                &quot;@nodes&quot;: []
            },
            {
                &quot;@name&quot;: &quot;1&quot;,
                &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/1&quot;,
                &quot;linkType&quot;: &quot;external&quot;,
                &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/account-info&quot;,
                &quot;LinkText&quot;: &quot;My Profile&quot;,
                &quot;@nodes&quot;: []
            },
            {
                &quot;@name&quot;: &quot;2&quot;,
                &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/2&quot;,
                &quot;linkType&quot;: &quot;external&quot;,
                &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/activity-history&quot;,
                &quot;LinkText&quot;: &quot;My Activity&quot;,
                &quot;@nodes&quot;: []
            },
            {
                &quot;@name&quot;: &quot;3&quot;,
                &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/3&quot;,
                &quot;linkType&quot;: &quot;external&quot;,
                &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/our-partners&quot;,
                &quot;LinkText&quot;: &quot;Our Partners&quot;,
                &quot;@nodes&quot;: []
            },
            {
                &quot;@name&quot;: &quot;4&quot;,
                &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/4&quot;,
                &quot;linkType&quot;: &quot;external&quot;,
                &quot;linkHref&quot;: &quot;https://badges.jetblue.com/&quot;,
                &quot;LinkText&quot;: &quot;My Badges&quot;,
                &quot;@nodes&quot;: []
            },
            {
                &quot;@name&quot;: &quot;5&quot;,
                &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/5&quot;,
                &quot;linkType&quot;: &quot;external&quot;,
                &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/current-deals&quot;,
                &quot;LinkText&quot;: &quot;CURRENT DEALS&quot;,
                &quot;@nodes&quot;: []
            },
            {
                &quot;@name&quot;: &quot;6&quot;,
                &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/6&quot;,
                &quot;linkType&quot;: &quot;external&quot;,
                &quot;linkHref&quot;: &quot;https://www.barclaycardus.com/&quot;,
                &quot;LinkText&quot;: &quot;VIEW CREDITS&quot;,
                &quot;@nodes&quot;: []
            },
            {
                &quot;@name&quot;: &quot;7&quot;,
                &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/7&quot;,
                &quot;linkType&quot;: &quot;external&quot;,
                &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/group/trueblue/trueblue-faqs&quot;,
                &quot;LinkText&quot;: &quot;FAQS&quot;,
                &quot;@nodes&quot;: []
            },
            {
                &quot;@name&quot;: &quot;8&quot;,
                &quot;@path&quot;: &quot;/jetBlue/header/0/profileLinks/8&quot;,
                &quot;linkType&quot;: &quot;external&quot;,
                &quot;linkHref&quot;: &quot;https://trueblue.jetblue.com/c/portal/logout&quot;,
                &quot;LinkText&quot;: &quot;SIGN OUT&quot;,
                &quot;@nodes&quot;: []
            }
        ]
    },
    &quot;@nodes&quot;: [
        &quot;profileLinks&quot;
    ]
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="160135" author="mgeljic" created="Mon, 7 May 2018 15:27:03 +0200"  >&lt;p&gt;FYI, the current format (child-objects + array of keys) was researched and done on purpose, for the lack of any information about the model.&lt;br/&gt;
We don&apos;t know &lt;em&gt;when&lt;/em&gt; an array would be preferred over sub-objects, or vice-versa; so we chose the approach which let us do both in the least opinionated way:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Direct access to sub-node =&amp;gt; &lt;tt&gt;page.subpage.foo&lt;/tt&gt;&lt;/li&gt;
	&lt;li&gt;Iterating over child-nodes, in order =&amp;gt; &lt;tt&gt;for (subpage of page.@nodes) ...&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Hope that helps, by the time we get proper content type modeling.&lt;/p&gt;</comment>
                            <comment id="162767" author="atuor" created="Mon, 18 Jun 2018 15:58:02 +0200"  >&lt;p&gt;At the moment, it&apos;s possible to change/extend the interface, to add additional configuration.&lt;br/&gt;
However, it&apos;s not possible to override/extend the implementation class. (No documentation about this in the &lt;a href=&quot;#DeliveryendpointAPIv2-Properties],&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docu&lt;/a&gt; and my try to override the implementationClass didn&apos;t work)&lt;br/&gt;
Therefore, it&apos;s not possible to make this adaption manually in the back-end. But this should be easy, as there is only the need, to change the the &lt;em&gt;ContentDecoratorNodeWrapper&lt;/em&gt;  class, to extend &lt;em&gt;ExtendingNodeWrapper&lt;/em&gt; instead of the &lt;em&gt;DelegateNodeWrapper&lt;/em&gt; (which is already extended by the &lt;em&gt;ExtendingNodeWrapper&lt;/em&gt; class).&lt;/p&gt;

&lt;p&gt;With the current implementation of seperating the keys from the values, it&apos;s hard to traverse multiple nodes. This would be much easier by having an array of nodes or an map of &amp;lt;key, node&amp;gt; to traverse.&lt;/p&gt;</comment>
                            <comment id="163388" author="will" created="Wed, 27 Jun 2018 11:54:44 +0200"  >&lt;p&gt;Make it configurable please! The current behaviour is a very good &quot;default&quot; implementation. But I would suggest, that you add support for a &quot;childNodes&quot; configuration:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
childNodeTypes:
&#160; - profileLink
&#160; - connection
childNodes:
  - profileLinks:
    isList: &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
    listName: bookmarks&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;br/&gt;
 This would then produce an output like&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
{
   &lt;span class=&quot;code-quote&quot;&gt;&quot;@name&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0&quot;&lt;/span&gt;,
   &lt;span class=&quot;code-quote&quot;&gt;&quot;@path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/jetBlue/header/0&quot;&lt;/span&gt;,
   &lt;span class=&quot;code-quote&quot;&gt;&quot;TrueBlueNrtxt&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;TrueBlue #&quot;&lt;/span&gt;,
   &lt;span class=&quot;code-quote&quot;&gt;&quot;bookmarks&quot;&lt;/span&gt;: [
      {
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@name&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/jetBlue/header/0/profileLinks/0&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;linkType&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;external&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;linkHref&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;https:&lt;span class=&quot;code-comment&quot;&gt;//trueblue.jetblue.com/group/trueblue/my-trueblue-home&quot;&lt;/span&gt;,
&lt;/span&gt;         &lt;span class=&quot;code-quote&quot;&gt;&quot;LinkText&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;Dashboard&quot;&lt;/span&gt;,
      },
      {
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@name&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;1&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/jetBlue/header/0/profileLinks/1&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;linkType&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;external&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;linkHref&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;https:&lt;span class=&quot;code-comment&quot;&gt;//trueblue.jetblue.com/group/trueblue/account-info&quot;&lt;/span&gt;,
&lt;/span&gt;         &lt;span class=&quot;code-quote&quot;&gt;&quot;LinkText&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;My Profile&quot;&lt;/span&gt;,
      },
      {
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@name&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;2&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/jetBlue/header/0/profileLinks/2&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;linkType&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;external&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;linkHref&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;https:&lt;span class=&quot;code-comment&quot;&gt;//trueblue.jetblue.com/group/trueblue/activity-history&quot;&lt;/span&gt;,
&lt;/span&gt;         &lt;span class=&quot;code-quote&quot;&gt;&quot;LinkText&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;My Activity&quot;&lt;/span&gt;,
      }
   ],
   &lt;span class=&quot;code-quote&quot;&gt;&quot;connections&quot;&lt;/span&gt;: {
      &lt;span class=&quot;code-quote&quot;&gt;&quot;@name&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;connections&quot;&lt;/span&gt;,
      &lt;span class=&quot;code-quote&quot;&gt;&quot;@path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/jetBlue/header/0/connections&quot;&lt;/span&gt;,
      &lt;span class=&quot;code-quote&quot;&gt;&quot;0&quot;&lt;/span&gt;: {
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@name&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;...&quot;&lt;/span&gt;
      },
      &lt;span class=&quot;code-quote&quot;&gt;&quot;1&quot;&lt;/span&gt;: {
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@name&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;1&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;@path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;...&quot;&lt;/span&gt;
      },
      &lt;span class=&quot;code-quote&quot;&gt;&quot;@nodes&quot;&lt;/span&gt;: [
         &lt;span class=&quot;code-quote&quot;&gt;&quot;0&quot;&lt;/span&gt;,
         &lt;span class=&quot;code-quote&quot;&gt;&quot;1&quot;&lt;/span&gt;
      ]
   }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;So if in &lt;tt&gt;childNodes&lt;/tt&gt;&#160;you have a nodeName &lt;tt&gt;profileLinks&lt;/tt&gt;&#160;which is set to &lt;tt&gt;isList: true&lt;/tt&gt;, then the child nodes of the &quot;profileLinks&quot; node would be represented as list instead of a map. Optionally you could also modify the name of the list (in the example above the jcr node name &quot;profileLinks&quot; is renamed to &quot;bookmarks&quot; in the JSON output. For the &quot;connections&quot;, no such setting is made. Therefore the standard data representation is used.&lt;/p&gt;

&lt;p&gt;I tried to do a little POC with a custom node writer. Unfortunately I could not get RestEasy to my writer as the class I sent it was always wrapped by the I18NContainerResponseFilter...&lt;/p&gt;</comment>
                            <comment id="163421" author="mgeljic" created="Wed, 27 Jun 2018 21:16:06 +0200"  >&lt;p&gt;Hi &lt;a href=&quot;https://jira.magnolia-cms.com/secure/ViewProfile.jspa?name=will&quot; class=&quot;user-hover&quot; rel=&quot;will&quot;&gt;will&lt;/a&gt;, sounds reasonable. &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.magnolia-cms.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; If you know for sure that you don&apos;t have any mixed child-collection of different types in specific places, why not letting you have it that way.&lt;/p&gt;</comment>
                            <comment id="163444" author="will" created="Thu, 28 Jun 2018 07:32:19 +0200"  >&lt;p&gt;Cool! When you&apos;re worried about mixed child nodes, you could add a &quot;nodeType&quot; property to that childNodes list configuration that would then filter the child nodes for a specified type.&lt;/p&gt;</comment>
                            <comment id="202593" author="czimmermann" created="Wed, 13 Nov 2019 14:30:36 +0100"  >&lt;p&gt;Bringing in information from &lt;a href=&quot;https://jira.magnolia-cms.com/browse/MGNLREST-200&quot; title=&quot;Delivery endpoint returns arrays of nodes&quot; class=&quot;issue-link&quot; data-issue-key=&quot;MGNLREST-200&quot;&gt;&lt;del&gt;MGNLREST-200&lt;/del&gt;&lt;/a&gt; (including its storypoints estimate)&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10021">
                    <name>duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="74704">MGNLREST-200</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10010">
                    <name>relation</name>
                                            <outwardlinks description="is related to">
                                                        </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_14166" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Acceptance criteria</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10111" key="com.atlassian.jira.toolkit:reporterdomain">
                        <customfieldname>Company</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>magnolia-cms.com</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10031" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Mon, 7 May 2018 15:27:03 +0200</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_12730" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14151" key="com.atlassian.jira.toolkit:message">
                        <customfieldname>Docu info</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_12130" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
                        <customfieldname>Documentation update required</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="13300"><![CDATA[Yes]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_10246" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>MGNLREST-218</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>czimmermann</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            4 years, 13 weeks, 4 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10020" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Number of attachments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10150" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname>Number of comments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>7.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>atuor</customfieldvalue>
            <customfieldvalue>czimmermann</customfieldvalue>
            <customfieldvalue>mgeljic</customfieldvalue>
            <customfieldvalue>rgange</customfieldvalue>
            <customfieldvalue>will</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|y01e7c:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10220" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
                        <customfieldname>Release notes required</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10490"><![CDATA[Yes]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10242" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>8.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_14145" key="com.intenso.jira.issue-templates:issue-templates-customfield">
                        <customfieldname>Template</customfieldname>
                        <customfieldvalues>
                            


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_15131" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Time in Discovery</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    </customfields>
    </item>
</channel>
</rss>