Search code examples
jsonspringspring-roo

In Spring Roo 2.0, using JSON to update an object creates a new one instead


In Spring Roo 2.0, using JSON to update an object creates a new one instead.

When I try to update an object using JSON, instead of updating the original object, I get a new one in the database. Am I doing something wrong?

The ticket before making changes. The Equipment reference field is null, so I want to change that.

{
    "id": 26,
    "version": 0,
    "ticketNumber": "Ticket 1",
    "ticketName": "T1 name",
    "location": "somewhere",
    "description": "desc",
    "customerName": null,
    "projectNumber": "Project 1",
    "opportunity": null,
    "marketSegment": null,
    "createdBy": "me",
    "plannedCreateDate": 1496556000000,
    "createDate": 1496556000000,
    "ticketStatus": "SUBMITTED",
    "ticketObjective": null,
    "equipment": null,
    "ticketResult": null,
    "ticketConclusion": null,
    "pivotuser": null
}

To change the object, I’m using: Method=PUT, url=” http://localhost:8000/json/tickets/26” Headers: Content-Type=application/json, Accept=application/json Body:

{
    "ticketNumber": "Ticket 1",
    "ticketName": "T1 name",
    "location": "somewhere",
    "description": "desc"
    "customerName": null,
    "projectNumber": "Project 1",
    "opportunity": null,
    "marketSegment": null,
    "createdBy": "me"
    "plannedCreateDate": 1496556000000,
    "createDate": 1496556000000,
    "ticketStatus": "SUBMITTED",
    "ticketObjective": null,
    "equipment": 3,
    "ticketResult": null
    "ticketConclusion": null,
    "pivotuser": null
}

Response: 200

Get tickets again:

"content": [
    {
        "id": 26,
        "version": 0,
        "ticketNumber": "Ticket 1",
        "ticketName": "T1 name",
        "location": "somewhere",
        "description": "desc",
        "customerName": null,
        "projectNumber": "Project 1",
        "opportunity": null,
        "marketSegment": null,
        "createdBy": "me",
        "plannedCreateDate": 1496556000000,
        "createDate": 1496556000000,
        "ticketStatus": "SUBMITTED",
        "ticketObjective": null,
        "equipment": null,
        "ticketResult": null,
        "ticketConclusion": null,
        "pivotuser": null
    },
    {
        "id": 27,
        "version": 0,
        "ticketNumber": "Ticket 1",
        "ticketName": "T1 name",
        "location": "somewhere",
        "description": "desc",
        "customerName": null,
        "projectNumber": "Project 1",
        "opportunity": null,
        "marketSegment": null,
        "createdBy": "me",
        "plannedCreateDate": 1496556000000,
        "createDate": 1496556000000,
        "ticketStatus": "SUBMITTED",
        "ticketObjective": null,
        "equipment": {
            "id": 4,
            "version": 0,
            "manufacturer": "manufacturer 1",
            "masterNumber": "master number 1",
            "ticket": {
                "id": 27,
                "version": 0,
                "ticketNumber": "Ticket 1",
                "ticketName": "T1 name",
                "location": "somewhere",
                "description": "desc",
                "customerName": null,
                "projectNumber": "Project 1",
                "opportunity": null,
                "marketSegment": null,
                "createdBy": "me",
                "plannedCreateDate": 1496556000000,
                "createDate": 1496556000000,
                "ticketStatus": "SUBMITTED",
                "ticketObjective": null,
                "equipment": 4,
                "ticketResult": null,
                "ticketConclusion": null,
                "pivotuser": null
            }
        },
        "ticketResult": null,
        "ticketConclusion": null,
        "pivotuser": null
    }

Ticket 26 has not changed. Ticket 27 was created with the Equipment reference = 4. What am I doing wrong. This is my first JSON project.


Solution

  • Just include id and version field in JSON request body. If any of that is missing JPA EntityManager will create a new item (as you found).

    Good luck!