Ваш вопрос касается согласования содержимого, которое позволяет потребителю (вашему пользовательскому агенту) и поставщику (вашему контроллеру) с самого начала согласиться с типом ответа
Прежде всего, потребитель APi должен указать, какой медиатип (типы) он примет для ответа. Это делается путем установки заголовка Accept для требуемого типа (ов). Таким образом, в случае, когда потребитель ожидает тип ответа как JSON, заголовок Accept должен быть настроен с «application / json» или «application / xml» для XML (или любым конкретным вариантом каждого из них, таким как «application / xhtml + xml» и так).
На стороне контроллера необходимо указать поддерживаемые типы ответа, используя свойство аннотации «производит». Существует также одноуровневое свойство «потребляет», которое указывает поддерживаемый тип (ы) запроса. Ооо ... наше отображение должно выглядеть так:
@GetMapping(value="someEndpoint",
produces={"application/json","application/xml"})
public ResponseEntity<Page<Person>> getPersons(
@RequestParam(value = "page", required = true) Integer pPage,
@RequestParam(value = "size", required = true) Integer pSize)
{
Page<Person> result;
result = personService.getPersons(new PageRequest(pPage, pSize));
return new ResponseEntity<>(result, HttpStatus.OK);
}
Теперь интересная часть заключается в том, что вам не нужно беспокоиться о форматировании ответа, поскольку Spring сможет определить требуемый для клиента медиатип ответа на основе значения заголовка Accept http-запроса.
Еще лучше, с правильной конфигурацией, вы можете установить mediaType ответа по умолчанию, если в запросе нет заголовка Accept. Таким образом, установив тип содержимого ответа по умолчанию на «application / json», любой запрос без заголовка Accept будет обслуживаться в JSON, в то время как потребитель должен будет добавить Accept: «application / xml», чтобы тип ответа был xml.
См. Это Руководство по пружине , где приведены примеры и варианты этой темы и параметров конфигурации.
Надеюсь, это поможет,
Джейк