Основанный на HAL клиент службы REST, использующий Traverson - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь написать программу на Java, которая будет использовать выходные данные веб-службы на основе REST, которую я написал, используя учебные материалы по адресу spring.io.Когда я запускаю SpringBoot bootRun, вывод JSON создается со встроенными данными и ссылками и выглядит так:

 {
"_embedded": {
    "invoiceList": [
        {
            "id": 4,
            "seqNum": 1,
            "fileId": null,
            "fileName": null,
            "invoiceNumber": "10080",
            "invoiceDate": "2018-06-18T05:00:00.000+0000",
            "invoiceTotal": 1000,
            "sourceLastModified": "2018-11-30T16:22:23.000+0000",
            "lastModified": "2018-11-30T16:22:23.000+0000",
            "validFrom": "2018-11-30T16:22:23.000+0000",
            "validTo": "9999-12-31T06:00:00.000+0000",
            "_links": {
                "self": {
                    "href": "http://localhost:8086/vadir/dental/invoices/4"
                },
                "invoices": {
                    "href": "http://localhost:8086/vadir/dental/invoices"
                },
                "claims": {
                    "href": "http://localhost:8086/vadir/dental/claims?invoice=10080"
                }
            }
        },
        {
            "id": 5,
            "seqNum": 1,
            "fileId": null,
            "fileName": null,
            "invoiceNumber": "10080",
            "invoiceDate": "2018-06-18T05:00:00.000+0000",
            "invoiceTotal": 500,
            "sourceLastModified": "2018-11-30T16:22:23.000+0000",
            "lastModified": "2018-11-30T16:22:23.000+0000",
            "validFrom": "2018-11-30T16:22:23.000+0000",
            "validTo": "9999-12-31T06:00:00.000+0000",
            "_links": {
                "self": {
                    "href": "http://localhost:8086/vadir/dental/invoices/5"
                },
                "invoices": {
                    "href": "http://localhost:8086/vadir/dental/invoices"
                },
                "claims": {
                    "href": "http://localhost:8086/vadir/dental/claims?invoice=10080"
                }
            }
        }
    ]
},
"_links": {
    "self": {
        "href": "http://localhost:8086/vadir/dental/invoices/last"
    }
}

}

Документацию по Traverson и SO я нашел на Потребление REST на основе HAL .Однако, когда я использую

ParameterizedTypeReference<Resources<Resource<DentalInvoice>>> parameterizedTypeReference =
        new ParameterizedTypeReference<Resources<Resource<DentalInvoice>>> () {
        };
    Traverson traverson =
        new Traverson (new URI ("http://localhost:8086/vadir/dental/invoices/last"), MediaTypes.HAL_JSON);
    Resources<Resource<DentalInvoice>> invoiceResources = traverson
                                                    //.follow ((String) null)
                                                    .follow ("$._embedded.invoiceList")
                                                    .toObject (parameterizedTypeReference);

, я получаю сообщение об ошибке: Недопустимый символ в имени схемы с индексом 0: [{"id": 4, ...

Похоже, что Траверсоножидая, что содержимое следующей ссылки будет ссылкой, а не встроенным объектом.Как я могу заставить Traverson анализировать внедренный объект в списке ресурсов DentalInvoices?

Нужно ли создавать метод контроллера, который выводит только ссылки на возможные действия, чтобы у Traverson была ссылка для подражания?

...