[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-serializatsiya-chto-takoe-jackson-i-kak-on-rabotaet":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},980,"chto-takoe-jackson-i-kak-on-rabotaet",30,"serializatsiya","Сериализация","📦","Что такое Jackson и как он работает?","Jackson — самая популярная библиотека для работы с JSON в Java-экосистеме. Центральный класс — `ObjectMapper`, который выполняет сериализацию (Java-объект -> JSON) и десериализацию (JSON -> Java-объект). Jackson используется по умолчанию в Spring Boot, Quarkus и Micronaut.\n\n### ObjectMapper: базовое использование\n\n\u003Cdetails>\n\u003Csummary>Пример конфигурации и сериализации\u002Fдесериализации\u003C\u002Fsummary>\n\n```java\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.databind.SerializationFeature;\nimport com.fasterxml.jackson.databind.DeserializationFeature;\nimport com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;\n\npublic class JacksonBasicExample {\n    public static void main(String[] args) throws Exception {\n        ObjectMapper mapper = new ObjectMapper();\n\n        \u002F\u002F Конфигурация\n        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);\n        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);\n        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);\n        mapper.registerModule(new JavaTimeModule());\n\n        \u002F\u002F Сериализация: объект -> JSON\n        User user = new User(\"Иван\", \"ivan@example.com\", 30);\n        String json = mapper.writeValueAsString(user);\n        \u002F\u002F {\"name\":\"Иван\",\"email\":\"ivan@example.com\",\"age\":30}\n\n        \u002F\u002F Красивый вывод\n        String prettyJson = mapper.writerWithDefaultPrettyPrinter()\n                                  .writeValueAsString(user);\n\n        \u002F\u002F Десериализация: JSON -> объект\n        String inputJson = \"\"\"\n            {\"name\":\"Мария\",\"email\":\"maria@example.com\",\"age\":25}\n            \"\"\";\n        User restored = mapper.readValue(inputJson, User.class);\n\n        \u002F\u002F Десериализация коллекций (generic-типы)\n        String arrayJson = \"\"\"\n            [{\"name\":\"Иван\",\"age\":30},{\"name\":\"Мария\",\"age\":25}]\n            \"\"\";\n        List\u003CUser> users = mapper.readValue(arrayJson,\n            new TypeReference\u003CList\u003CUser>>() {});\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Основные аннотации\n\n| Аннотация | Назначение | Пример |\n|-----------|-----------|--------|\n| `@JsonProperty(\"name\")` | Явное имя JSON-поля | `@JsonProperty(\"full_name\")` |\n| `@JsonIgnore` | Исключение поля | На пароле, внутреннем коде |\n| `@JsonFormat` | Формат даты\u002Fчисла | `@JsonFormat(pattern = \"dd.MM.yyyy\")` |\n| `@JsonInclude` | Условие включения | `Include.NON_NULL` — не писать null |\n| `@JsonAlias` | Альтернативные имена при чтении | `@JsonAlias({\"email_address\"})` |\n| `@JsonNaming` | Стратегия именования на уровне класса | `SnakeCaseStrategy.class` |\n\n### Модуль JavaTimeModule\n\nОбязателен для работы с `java.time.*` (`LocalDate`, `LocalDateTime` и др.). Без него Jackson выбросит `InvalidDefinitionException`.\n\n```java\nObjectMapper mapper = new ObjectMapper();\nmapper.registerModule(new JavaTimeModule());\nmapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);\n```\n\nMaven-зависимость:\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.fasterxml.jackson.datatype\u003C\u002FgroupId>\n    \u003CartifactId>jackson-datatype-jsr310\u003C\u002FartifactId>\n\u003C\u002Fdependency>\n```\n\n### Ключевые правила\n\n- `ObjectMapper` потокобезопасен после конфигурации — создавайте один экземпляр и переиспользуйте\n- `FAIL_ON_UNKNOWN_PROPERTIES = false` — критически важно для обратной совместимости API\n- `TypeReference` нужен для десериализации generic-типов, так как Java стирает generic-информацию в рантайме\n\n### Частые ошибки\n\n- Создание нового `ObjectMapper` на каждый запрос — потеря производительности\n- Забытый `JavaTimeModule` при использовании `LocalDate`\u002F`LocalDateTime`\n- Отсутствие конструктора без аргументов — Jackson не сможет создать объект (если не использовать `@JsonCreator`)\n- `FAIL_ON_UNKNOWN_PROPERTIES = true` (по умолчанию) — падение при добавлении новых полей в API\n\n> **На собеседовании:** покажите знание `ObjectMapper`, назовите 3-4 основные аннотации и упомяните `JavaTimeModule`. Частая проверка — знаете ли вы, что `ObjectMapper` нужно переиспользовать, а не создавать каждый раз.","","junior",[15],"serialization",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое Jackson и как он работает? — Gymterview","Jackson — самая популярная библиотека для работы с JSON в Java-экосистеме. Центральный класс — `ObjectMapper`, который выполняет сериализацию (Java-объект -> JS","Jackson — самая популярная библиотека для работы с JSON в Java-экосистеме. Центральный класс — `ObjectMapper`, который в",[15,13],"Jackson — самая популярная библиотека для работы с JSON в Java-экосистеме. Центральный класс — `ObjectMapper`, который выполняет сериализацию (Java-объект -> JSON) и десериализацию (JSON -> Java-объект). Jackson используется по умолчанию в Spring Boot, Quarkus и Micronaut.",true]