Подтвердить что ты не робот

Необязательно отключить формат HATEOAS в Spring Data Rest

Итак, скажем, у меня есть существующее приложение, в котором есть две конечные точки/люди и/брюки. Вызов GET/people возвращает:

[
    {
        "name":"john",
        "age":37,
        "pants":[
            {
                "color":"green",
                "brand":"levis",
                "size":"medium"
            },
            {
                "color":"indigo",
                "brand":"jncos",
                "size":"medium-with-huge-legs"
            }
        ]
    },
    {
        "name":"june",
        "age":23,
        "pants":[
            {
                "color":"pink",
                "brand":"gap",
                "size":"small"
            }
        ]
    }
]

Если бы я использовал Spring Data Rest и позвонил GET/person, я получил бы что-то вроде:

{
    "_links":{
        "next":{
            "href":"http://myapp.com/people?page=1&size=20"
        },
        "self":{
            "href":"http://myapp.com/people{&page,size,sort}",
            "templated":true
        },
        "search":{
            "href":"http://myapp.com/people/search"
        }
    },
    "_embedded":{
        "people":[
            {
                "name":"john",
                "age":37,
                "_links":{
                    "self":{
                        "href":"http://myapp.com/people/john"
                    },
                    "pants":{
                        "href":"http://myapp.com/people/john/pants"
                    }
                }
            },
            {
                "name":"june",
                "age":23,
                "_links":{
                    "self":{
                        "href":"http://myapp.com/people/june"
                    },
                    "pants":{
                        "href":"http://myapp.com/people/june/pants"
                    }
                }
            }
        ]
    }
}

Скажем, у меня есть куча существующих клиентов, которые я не хочу менять - есть ли способ отключить части гипермедиа ответа в некоторых случаях (например, Accept = "application/json" ), но разрешить это они для других (Accept = "hal + json" )?

Спасибо!

Обновление

Хорошо - так кажется, что, к моему огорчению, то, что я ищу, не поддерживается. Я не понимаю, почему SDR сильно склоняется к Hypermedia... но я не покупаю это, предоставляя возможность "отключить" гипермедиа на основе заголовка, тем самым предоставляя больше вариантов, это плохо.

В стороне, я немного не уверен, как на самом деле добиться этого через мои собственные контроллеры. Если я создаю Контроллер и попытаюсь переопределить /people RequestMapping с помощью команды `production = "application/json", я могу вернуть "raw" json обратно с помощью Accept = "application/json", но если я передаю Accept = "application/hal + json" Я получаю 406 с "Не могу найти приемлемого представления". Похоже, что сопоставления ресурсов SDR не сопоставляются с типом контента... любые предложения?

4b9b3361

Ответ 1

Короткий ответ: вы не можете использовать spring -data-rest без ненависти. Если вы хотите создать свой веб-сервис без ненависти, вам придется писать свои собственные контроллеры (которые все еще могут использовать хранилища spring -data).

Цитата Оливера Гирке в этом SO post:

Собственно, все мое дело в том, что сервер просто делает достойный REST. Если который разбивает клиента, его клиент должен быть исправлен (Оптимальный). Таким образом, гипермедийный аспект является фундаментальным для SpringData REST, и мы не собираемся отказываться от этого. Это, вероятно, не удовлетворяя в вашей конкретной ситуации, но должен ответить на вопрос как минимум:). - Оливер Гирке