[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rest-api-chto-takoe-content-negotiation":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},1119,"chto-takoe-content-negotiation",34,"rest-api","REST API","🌐","Что такое Content Negotiation?","Content Negotiation (согласование содержимого) — механизм HTTP, позволяющий клиенту и серверу договориться о формате представления ресурса.\n\nКлиент указывает желаемый формат через заголовки:\n- `Accept` — желаемый формат ответа (`application\u002Fjson`, `application\u002Fxml`).\n- `Accept-Language` — предпочитаемый язык (`ru`, `en`).\n- `Accept-Encoding` — предпочитаемое сжатие (`gzip`, `deflate`).\n- `Content-Type` — формат отправляемых данных в теле запроса.\n\n```\nGET \u002Fapi\u002Fusers\u002F42 HTTP\u002F1.1\nAccept: application\u002Fjson\nAccept-Language: ru\n\nОтвет:\nHTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson; charset=utf-8\nContent-Language: ru\n```\n\nЕсли сервер не может вернуть данные в запрошенном формате, он возвращает 406 Not Acceptable.\n\n\u003Cdetails>\u003Csummary>Реализация в Spring\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Spring автоматически поддерживает JSON и XML\n@RestController\n@RequestMapping(\"\u002Fapi\u002Fusers\")\npublic class UserController {\n\n    \u002F\u002F Поддерживает и JSON, и XML\n    @GetMapping(value = \"\u002F{id}\",\n                produces = {MediaType.APPLICATION_JSON_VALUE,\n                            MediaType.APPLICATION_XML_VALUE})\n    public User getUser(@PathVariable Long id) {\n        return userService.findById(id);\n    }\n\n    \u002F\u002F Принимает JSON или XML\n    @PostMapping(consumes = {MediaType.APPLICATION_JSON_VALUE,\n                             MediaType.APPLICATION_XML_VALUE})\n    public ResponseEntity\u003CUser> createUser(@RequestBody User user) {\n        User saved = userService.save(user);\n        return ResponseEntity.status(HttpStatus.CREATED).body(saved);\n    }\n}\n```\n\nДля поддержки XML в Spring Boot необходимо добавить зависимость:\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.fasterxml.jackson.dataformat\u003C\u002FgroupId>\n    \u003CartifactId>jackson-dataformat-xml\u003C\u002FartifactId>\n\u003C\u002Fdependency>\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** достаточно объяснить механизм через заголовки Accept\u002FContent-Type и упомянуть код 406. Частая ошибка — путать Accept (чего хочет клиент) и Content-Type (что реально отправлено).","","middle",[15],"rest",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":20,"featuredSnippetReady":23},"Что такое Content Negotiation? — Gymterview","Content Negotiation (согласование содержимого) — механизм HTTP, позволяющий клиенту и серверу договориться о формате представления ресурса.","Content Negotiation (согласование содержимого) — механизм HTTP, позволяющий клиенту и серверу договориться о формате пре",[15,13],true]