2017-04-25 4 views
0

Ich habe einige Probleme bekommen die XML-Ausgabe erwarte ich mit JMS-Serialisierer und Symfony 3.JMS Serializer. Xml-Tag-Name für Array von Objekten

Ich habe eine Entität namens "Referenz". Verwendung der Annotations @XmlRoot („Referenz“) und ein Objekt nur zurückkehrt, wird die XML-Ausgabe von fos Rest Bündel wie erwartet:

<reference> 
    <id>1</id> 
    <title>Title 1</title> 
</reference> 

Aber wenn ich Ausgang findAll() ein Array der gleichen Objekte (zurückgegeben durch Lehren Methode) bekomme ich diese:

<result> 
    <entry> 
    <id>1</id> 
    <title>Title 1</title> 
    </entry> 
    <entry> 
    <id>2</id> 
    <title>Title 2</title> 
    </entry> 
    <entry> 
    <id>3/id> 
    <title>Title 3</title> 
    </entry> 
</result> 

Der Tag <entry> genannt wird, aber ich würde dies erreichen mag:

<result> 
     <reference> 
     <id>1</id> 
     <title>Title 1</title> 
     </reference> 
     <reference> 
     <id>2</id> 
     <title>Title 2</title> 
     </reference> 
     <reference> 
     <id>3/id> 
     <title>Title 3</title> 
     </reference> 
</result> 

(I don weiß nicht, wie man @XmlList in diesem Fall benutzt, weil ich nicht eine Elternentität habe, die die Bezugsartikel hält ...)

Danke!

Antwort

0

Zunächst ist Ihr erwartetes XML für mich nicht gut formatiert. Die id sollte stattdessen ein Attribut sein. Das Beispiel unten macht es. Siehe das Ergebnis unten. Wenn Sie mehr Beispiele wollen, dann schauen Sie sich die unten stehenden Links an, die Ihnen viel beibringen.

Ergebnis

namespace Application/YourBundle/Model; 

use Application/YourBundle/Model/Reference; 
use JMS\Serializer\Annotation as Serializer; 

/** 
* @Serializer\XmlRoot("result") 
*/ 
class Result 
{ 
    /** 
    * @var Reference[] 
    * 
    * @Assert\Valid(traverse="true") 
    * 
    * @Serializer\XmlList(inline=false, entry="reference") 
    * @Serializer\Type("array<Application\YourBundle\Model\Reference>") 
    */ 
    public $references = []; 
} 

Referenz

namespace Application/YourBundle/Model; 

use JMS\Serializer\Annotation as Serializer; 

class Reference 
{ 
    /** 
    * @var int 
    * 
    * @Serializer\Type("integer") 
    * @Serializer\XmlAttribute 
    */ 
    public $id; 

    /** 
    * @var string 
    * 
    * @Serializer\Type("string") 
    * @Serializer\XmlValue 
    */ 
    public $title; 
} 

Dieses Setup sollten Sie:

<result> 
    <references> 
     <reference id="1">Title 1</reference> 
     <reference id="2">Title 2</reference> 
     <reference id="3">Title 3</reference> 
    </references> 
</result> 

Wenn Ihre Antwort Objekt ein json ist dann würde es so aussehen:

{ 
    "references": [ 
     { 
      "id": 1, 
      "title": "Title 1" 
     }, 
     { 
      "id": 2, 
      "value": "Title 2" 
     }, 
     { 
      "id": 3, 
      "value": "Title 3" 
     } 
    ] 
} 
+0

Großartig, danke! – user1915746

Verwandte Themen