POST-Befehl /api/property-group von der ADMIN-API funktioniert nicht "Wert sollte nicht leer sein"

Hi,

Ich bin gerade dabei auszuprobieren eine neue “Eigenschaft” (property-group) mit der API anzulegen. Dafür habe ich den Aufruf /api/v1/property-group mit POST verwendet. 

In den Body habe ich folgenden Testcode von swagger eingefügt:

{
  "data": {
    "type": "string",
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "attributes": {
      "additionalProp1": {}
    },
    "relationships": {
      "options": {
        "links": {
          "related": "/property-group/4cad960a115f4b719bbbf52b38fb78f9/options"
        },
        "data": [
          {
            "type": "property_group_option",
            "id": "5d4ff0eb07114c5b880a573e947f290a"
          }
        ]
      }
    },
    "links": {},
    "meta": {
      "additionalProp1": {}
    },
    "name": "string",
    "description": "string",
    "displayType": "string",
    "sortingType": "string",
    "filterable": true,
    "position": 0,
    "customFields": {},
    "translated": {}
  },
  "included": [
    {
      "type": "string",
      "id": "string",
      "attributes": {
        "additionalProp1": {}
      },
      "relationships": {},
      "links": {},
      "meta": {
        "additionalProp1": {}
      }
    }
  ]
}

Aber egal, was ich mache, mir wird immer diese Fehlermeldung ausgegeben:

{
    "errors": [
        {
            "code": "c1051bb4-d103-4f74-8988-acbcafc7fdc3",
            "status": "400",
            "detail": "Dieser Wert sollte nicht leer sein.",
            "template": "This value should not be blank.",
            "meta": {
                "parameters": {
                    "{{ value }}": "null"
                }
            },
            "source": {
                "pointer": "/0/translations/2fbb5fe2e29a4d70aa5854ce7ce3e20b/name"
            }
        }
    ]
}

Als ich probiert habe Produkte zu erstellen hat alles geklappt (/api/v1/product) habe hierzu direkt das Beispiel aus dem API guide genommen. Bei den Eigenschaften habe ich das mit Hilfe von Swagger genommen, da in dem API guide nicht alles steht.

Bei der GET methode funktioniert alles und mir werden die Eigenschaften ausgegeben.

Ich würde mich sehr freuen, wenn mir jemand von euch weiterhelfen kann :slight_smile:

Gruß

Balram

Schonmal das hier weggelassen:

"meta": {
        "additionalProp1": {}
      }

 

1 „Gefällt mir“

Ja, es kommt aber leider genau die gleiche Fehlermeldung :confused:

Wenn ich jetzt aber eine Eigenschaft aus der Ausgabe von dem GET reinkopiere, z.B. das für das Objekt farbe:

        {
            "id": "269c7e40a54a462e884edb004c5f7bc8",
            "type": "property_group",
            "attributes": {
                "name": "Farbe",
                "description": null,
                "displayType": "color",
                "sortingType": "alphanumeric",
                "filterable": true,
                "position": 1,
                "customFields": null,
                "createdAt": "2020-07-22T13:31:45+00:00",
                "updatedAt": null,
                "translated": {
                    "name": "Farbe",
                    "description": null,
                    "position": 1,
                    "customFields": []
                }
            },
            "links": {
                "self": "http://www.test-76586.alfa3044.alfahosting-server.de/public/api/v1/property-group/269c7e40a54a462e884edb004c5f7bc8"
            },
            "relationships": {
                "options": {
                    "data": [],
                    "links": {
                        "related": "http://www.test-76586.alfa3044.alfahosting-server.de/public/api/v1/property-group/269c7e40a54a462e884edb004c5f7bc8/options"
                    }
                },
                "translations": {
                    "data": [],
                    "links": {
                        "related": "http://www.test-76586.alfa3044.alfahosting-server.de/public/api/v1/property-group/269c7e40a54a462e884edb004c5f7bc8/translations"
                    }
                }
            },
            "meta": null
        }

Dann kommt ein anderer Error undzwar der hier:

{
    "errors": [
        {
            "status": "500",
            "code": "FRAMEWORK__WRITE_TYPE_INTEND_ERROR",
            "title": "Internal Server Error",
            "detail": "Expected command for \"Shopware\\Core\\Content\\Property\\PropertyGroupDefinition\" to be \"Shopware\\Core\\Framework\\DataAbstractionLayer\\Write\\Command\\InsertCommand\". (Got: Shopware\\Core\\Framework\\DataAbstractionLayer\\Write\\Command\\UpdateCommand)",
            "meta": {
                "parameters": {
                    "definition": "Shopware\\Core\\Content\\Property\\PropertyGroupDefinition",
                    "expectedClass": "Shopware\\Core\\Framework\\DataAbstractionLayer\\Write\\Command\\InsertCommand",
                    "actualClass": "Shopware\\Core\\Framework\\DataAbstractionLayer\\Write\\Command\\UpdateCommand"
                }
            }
        }
    ]
}

 

Kann es vielleicht sein, dass ich die id, die ich auswähle obern in den aufruf reinschreiben muss? z.B. /api/v1/property-group{23480ß233tr3ßfß2cjowjr4235}

Das in den Klammern ist dann die id

 

Hi balram,

der Request-Body:

{
  "data": {
    "type": "string",
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "attributes": {
      "additionalProp1": {}
    },
    "relationships": {
      "options": {
        "links": {
          "related": "/property-group/4cad960a115f4b719bbbf52b38fb78f9/options"
        },
        "data": [
          {
            "type": "property_group_option",
            "id": "5d4ff0eb07114c5b880a573e947f290a"
          }
        ]
      }
    },
    "links": {},
    "meta": {
      "additionalProp1": {}
    },
    "name": "string",
    "description": "string",
    "displayType": "string",
    "sortingType": "string",
    "filterable": true,
    "position": 0,
    "customFields": {},
    "translated": {}
  },
  "included": [
    {
      "type": "string",
      "id": "string",

Ist vom Content-Type ‘application/vnd.api+json’, entweder du musst den Content-Type deines Requests darauf ändern oder du nutzt von der Swagger-Doku das Beispiel des Content-Type ‘application/json’, dann sollte es sofort funktionieren. Der Fehler mit der Missing-Translation erscheint in deinem Fall, weil in dem vnd-Content-Type es auf der ersten Ebene nur ein data-Key gibt, aber das name-Field required ist.

Ich hoffe dies hilft dir weiter.

Gruß

Krispin

1 „Gefällt mir“

Hi @Krispin‍

Ich bin sehr Dankbar, dass du mir immer hilfst!

Habe den Content-Type auf ‚application/vnd.api+json‘ gesetzt. 

In den Body habe ich einfach das Beispiel von Swagger zu dem Aufruf eingefügt:

{
  "data": {
    "type": "string",
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "attributes": {
      "additionalProp1": {}
    },
    "relationships": {
      "options": {
        "links": {
          "related": "/property-group/4cad960a115f4b719bbbf52b38fb78f9/options"
        },
        "data": [
          {
            "type": "property_group_option",
            "id": "5d4ff0eb07114c5b880a573e947f290a"
          }
        ]
      }
    },
    "links": {},
    "meta": {
      "additionalProp1": {}
    },
    "name": "string",
    "description": "string",
    "displayType": "string",
    "sortingType": "string",
    "filterable": true,
    "position": 0,
    "customFields": {},
    "translated": {}
  },
  "included": [
    {
      "type": "string",
      "id": "string",
      "attributes": {
        "additionalProp1": {}
      },
      "relationships": {},
      "links": {},
      "meta": {
        "additionalProp1": {}
      }
    }
  ]
}

Habe dann eine andere Fehlermeldung bekommen: (Hat also schon mal was bewirkt mit dem Content-Type :slight_smile: )

{
    "errors": [
        {
            "code": "0",
            "status": "400",
            "title": "Bad Request",
            "detail": "Resolving relationship \"property_group_option(5d4ff0eb07114c5b880a573e947f290a)\" failed due to non-existence."
        }
    ]
}

Hast du ne gute Idee, was ich da machen kann?

Gruß

balram

Hi balram,

ehrlich gesagt, habe ich noch nicht mit dem Content-Type selbst gearbeitet und kann dir damit nicht weiterhelfen.
Versuch bitte mal den JSON-Content-Type, dann sollte es funktionieren.

Gruß

Krispin

Wenn ich den Content-Type application/json nehme, dann kommt wieder der ursprüngliche Fehler, den ich gestern schon hatte :confused:

{
    "errors": [
        {
            "code": "c1051bb4-d103-4f74-8988-acbcafc7fdc3",
            "status": "400",
            "detail": "Dieser Wert sollte nicht leer sein.",
            "template": "This value should not be blank.",
            "meta": {
                "parameters": {
                    "{{ value }}": "null"
                }
            },
            "source": {
                "pointer": "/0/translations/2fbb5fe2e29a4d70aa5854ce7ce3e20b/name"
            }
        }
    ]
}

 

Hallo Balram, der Fehler sagt, dass du NULL/ oder auch „nichts“ nicht übergeben sollst.

In deiner Übergabe-Liste sind einige Parameter die ein Leeres Object/Array übergeben. Lösche die einmal raus.

1 „Gefällt mir“

Hi balram,

ich meine nicht, dass du einfach den Content-Type deines Requests ändern sollst, aber der Inhalt gleich bleibt, sondern: Nimm das Beispiel aus Swagger mit dem Content-Type „application/json“ und nutze dann auch diesen Content-Type. (In der Swagger-Übersicht gibt es ein Auswahlfeld, wo du den Content-Type auswählen kannst)

Gruß

Krispin

1 „Gefällt mir“

Hi @brettvormkopp‍

Meinst du ich soll hier alle Parameter rauslöschen die nur eine leere Klammer haben? z.B. “links”: {}

{
  "data": {
    "type": "string",
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "attributes": {
      "additionalProp1": {}
    },
    "relationships": {
      "options": {
        "links": {
          "related": "/property-group/4cad960a115f4b719bbbf52b38fb78f9/options"
        },
        "data": [
          {
            "type": "property_group_option",
            "id": "5d4ff0eb07114c5b880a573e947f290a"
          }
        ]
      }
    },
    "links": {},
    "meta": {
      "additionalProp1": {}
    },
    "name": "string",
    "description": "string",
    "displayType": "string",
    "sortingType": "string",
    "filterable": true,
    "position": 0,
    "customFields": {},
    "translated": {}
  },
  "included": [
    {
      "type": "string",
      "id": "string",
      "attributes": {
        "additionalProp1": {}
      },
      "relationships": {},
      "links": {},
      "meta": {
        "additionalProp1": {}
      }
    }
  ]
}

 

@Krispin‍ ich probiere es gleich aus und sage dir bescheid, ob es funktioniert hat. Swagger lädt bei dieser API irgendwie Ewigkeiten und bleibt die ganze Zeit hängen. 

Kann es auch nicht gescheid kopieren, weil es beim auswählen schon immer einfriert

Hi balram,

ist leider bei mir auch so, weil Swagger anscheinend wirklich jede Sub-Relation mit einbezieht und darstellen möchte.
Am besten schaust du dir dies dann in der Administration an, wie die Request hier aussehen, oder gehst bei Swagger auf “Schema” (und nicht auf “Example Value”). Bei dem Schema kannst du dir die Struktur anschauen, siehst welche Felder-Pflichtfelder sind und kannst durch die Relationen gehen. Leider hast du da dann keine Beispiele, die du direkt ausführen kannst, aber dies sollte dich trotzdem schonmal weiter bringen.

Gruß

Krispin

1 „Gefällt mir“

Hey @Krispin‍,

ich probiere das mal aus mit dem Schema.

Ich merke gerade, du bist bei der Beschreibung für property_group_flat

ich habe immer die für property_group genommen und da musste man auch bei dem POST von anfang an eine ID mitschicken bei dem für proberty_group_flat

Bei property_group_flat was du mir grad gezeigt hast braucht man ja keine ID muss ich mal ausprobieren :slight_smile:

Was ich mich noch frage, was für eine id ich da eintragen muss. Weiß das jemand?

 

Gruß Balram

Hi balram,

die id kannst du entweder selbst vergeben (ist eine UUID) oder wenn du dies nicht angibst, wird diese beim Erstellen selbst vergeben.

Gruß

Krispin

1 „Gefällt mir“

Sehr gut zu wissen, danke dir Krispin ich probiere es gleich mal Thumb-Up

@Krispin‍ hab mal nur die Sachen in den Body gemacht, wo in der Beschreibung auch ein Roter * ist.

Jetzt bekomme ich wieder nen anderen Fehler der Aufruf müsste doch stimmen oder?

Hi balram,

der Key “data” ist bei dem Content-Type application/json nicht nötig, hier werden alle Felder direkt im Root definiert:

{
    "name": "string",
    "description": "string",
    "displayType": "string",
    "sortingType": "string",
    "filterable": true,
    "position": 0
}

Hinweis: Das createdAt-Feld ist zwar ein Pflichtfeld, wird aber vom DAL selbst gefüllt und muss nicht (kann aber) selbst angegeben werden.

Gruß

Krispin

1 „Gefällt mir“

Hi @Krispin‍,

endlich funktioniert es :slight_smile: Tausend dank! Hätte ich niemals hinbekommen ohne euch!

Habe also einfach den falschen Body eingefügt. Mit dem Hier funktioniert alles:

Woher hast du den Test-Code Krispin? Wenn ich den Body einfach aus swagger rauskopiere funktioniert überhaupt nix.

Gruß

balram