Classe ObjectMapper em Jackson
ObjectMapper é uma das classes mais importantes disponíveis em o Jackson biblioteca. É usado para ler e gravar dados JSON. É responsável pela leitura de dados de ou para um arquivo POJO e de e para um modelo de árvore JSON.
Existem as seguintes características da classe ObjectMapper:
- Ele suporta conceitos avançados como Polimorfismo e Reconhecimento de objeto.
- É muito personalizável trabalhar com diferentes estilos de conteúdo JSON.
- Funciona como uma fábrica para o avanço Leitor de objetos e Escritor de objetos Aulas.
A classe ObjectMapper é declarada da seguinte maneira:
public class ObjectMapper extends ObjectCodec implements Versioned, Serializable
Classes aninhadas
A tabela a seguir define as classes que estendem a classe ObjectMapper ou, pode-se dizer, classes aninhadas da classe ObjectMapper.
| Aula | Descrição |
|---|---|
| DefaultTypeResolverBuilder | É um personalizado TipoResolverBuilder classe que é usada para obter os construtores do resolvedor de tipo, que podemos usar com 'digitação padrão'. |
| Digitação padrão | Para especificar o tipo de tipos, enumerações são usadas com o método enableDefaultTyping(). |
Agora, vamos entender os campos, construtores e métodos da classe ObjectMapper:
Campos da classe ObjectMapper
protected DefaultDeserializationContext _deserializationContext
É um objeto de contexto de blueprint armazenado para permitir subclasses personalizadas.
protected DeserializationConfig _deserializationConfig
É um objeto de configuração usado para definir as configurações globais básicas para o processo de desserialização.
JsonFactory protegido jsonFactory
Para criar uma instância de JsonParser e JsonGenerator, JsonFactory é usado.
InjectableValues protegidos _injectableValues
É um provedor usado para injetar os valores em POJOs desserializados.
ConfigOverrides protegidos _propertyOverrides
É usado para acessar as substituições de configuração por tipo atualmente ativas.
SimpleMixInResolver protegido _mixIns
É um mapeamento usado para definir uma forma de aplicar anotações mix-in. O mapeamento é feito da seguinte maneira:
Chave: Digite para receber anotações adicionais.
Valor: Tipo que possui anotações para 'misturar'
conjunto protegido _registeredModuleTypes
É um Conjunto que define o conjunto de tipos de módulos que foram cadastrados.
SerializationConfig protegido _serializationConfig
É também um objeto de configuração usado para definir as configurações globais básicas para o processo de serialização.
ConcurrentHashMap protegido
É um mapa usado para rastrear desserializadores de nível raiz. É um mapa de nível principal.
SerializerFactory protegido _serializerFactory
É uma fábrica usada para construir os serializadores.
SubtypeResolver protegido _subtypeResolver
É usado para registrar subtipos e resolvê-los para super/subtipos conforme necessário.
TypeFactory protegido _typeFactory
É uma fábrica usada para criar instâncias JavaType. Eles são necessários para permitir que os módulos adicionem mais manipulação de tipos personalizados.
protected DefaultSerializerProvider _serializerProvider
É um objeto responsável por gerenciar o acesso aos serializadores utilizados para serialização.
BaseSettings estáticos protegidos DEFAULT_BASE
São configurações básicas que incluem padrões usados para todas as instâncias do ObjectMapper.
Construtores da classe ObjectMapper
Existem os seguintes construtores da classe ObjectMapper:
| Construtor | Descrição |
|---|---|
| ObjectMapper() | É um construtor padrão usado para construir uma instância que usa padrão JsonFactory, SerializerProvider, e BeanSerializerFactory. |
| ObjectMapper (fábrica JsonFactory) | É usado para construir uma instância que usa o JsonFactory fornecido. O JsonFactory fornecido é usado para construir JsonParsers e/ou Geradores Json. |
| ObjectMapper (fábrica JsonFactory, provedor SerializerProvider1, provedor DeserializerProvider2) | É usado para construir uma instância que usa o dado JsonFactory, SerializerProvider, e DeserializerProvider. O JsonFactory fornecido é usado para construir JsonParsers e/ou Geradores Json. |
| ObjectMapper protegido (mapeador ObjectMapper) | É um construtor de cópia para suportar copy(). |
Métodos da classe ObjectMapper
A classe ObjectMapper define os seguintes métodos:
| Método | Tipo de retorno | Descrição |
|---|---|---|
| _checkInvalidCopy(Classe exp) | vazio | É usado para verificar cópias inválidas. |
| _configAndWriteValue(JsonGenerator g, valor do objeto) | vazio | É utilizado para configurar o gerador quando necessário e então executar a funcionalidade de gravação. |
| _convert(Objeto deValue, JavaType paraValueType) | Objeto | É usado para obter a implementação real da conversão. Aqui, os métodos de leitura e gravação não são usados para o código. |
| _initForReading(JsonParserp) | JSONToken | É usado para garantir se o analisador fornecido está pronto para ler o conteúdo para ligação de dados ou não. |
| _findRootDeserializer(DeserializationContext ctxt, JavaType valueType) | JsonDeserializer | Para o valor de nível raiz passado, se quisermos localizar o desserializador, usamos este método. |
| _newReader(configuração DeserializationConfig) Método semelhante:
| Leitor de objetos | É um método de fábrica, ou seja, usado para obter as instâncias de ObjectReader do subtipo adequado. Para utilizar este método, é necessário que as subclasses sejam substituídas. |
| _newWriter (configuração SerializationConfig) Métodos semelhantes:
| Escritor de objetos | É um método de fábrica, ou seja, usado para obter as instâncias do ObjectWriter do subtipo adequado. Para utilizar este método, é necessário que as subclasses sejam substituídas. |
| _readValue(DeserializationConfig cfg, JsonParser p, JavaType valueType) | Objeto | É usado para obter um objeto que define a operação de leitura e vinculação de valores. |
| _serializerProvider(configuraçãoSerializationConfig) | DefaultSerializerProvider | É um método auxiliar substituível usado para construir SerializerProvider. |
| aceitarJsonFormatVisitor (tipo de classe, visitante JsonFormatVisitorWrapper) Método semelhante:
| vazio vazio | Se quisermos visitar a hierarquia de tipos de um tipo específico com o visitante especificado, usamos este método. |
| addHandler(DesserializaçãoProblemHandler h) | ObjectMapper | Para lidar com problemas especificados durante a desserialização, usamos um DeserializationProblemHandler especificado e, para adicionar o manipulador, usamos este método. |
| addMixIn(alvo da classe, classe mixinSource) | ObjectMapper | Para usar a anotação mix-in para uma classe ou interface de aumento especificada, usamos este método para adicioná-la. |
| canDeserialize(tipo JavaType) | boleano | É usado para verificar se o mapeador pode desserializar um objeto de um tipo especificado ou não. |
| canDeserialize(tipo JavaType, causa AtomicReference) | boleano | É semelhante ao método anterior. A única diferença é que ele pode retornar o jogável que foi lançado no momento da construção do serializador. O lançável pode ser usado para descobrir o problema real. |
| canSerialize (tipo de classe) | boleano | É usado para verificar se o mapeador pode serializar um objeto de um tipo especificado ou não. |
| canSerialize(Tipo de classe, causa AtomicReference) | boleano | É semelhante ao método anterior. A única diferença é que ele pode retornar o jogável que foi lançado no momento da construção do serializador. O lançável pode ser usado para descobrir o problema real. |
| limparProblemHandlers() | ObjectMapper | É um dos métodos usados para remover todas as instâncias de DeserializationProblemHandlers do mapeador que estão registradas. |
| configure(DeserializationFeature f, estado booleano) métodos semelhantes:
| ObjectMapper | Ele é usado para alterar o estado de uma desserialização ativada/desativada, gerador Json, JsonParser, mapeador ou recurso de serialização para o mapeador de objetos, instâncias de gerador, instâncias de analisador, instância de mapeador ou mapeador de objetos. |
| construtorType(Tipo t) | JavaType | Se quisermos construir JavaType a partir de um determinado tipo sem contexto explícito, usamos este método. |
| convertValue(Objeto fromValue, Classe toValueType) Métodos semelhantes:
| T | Se quisermos realizar uma conversão em duas etapas de um determinado valor em uma instância de um determinado tipo de valor, usamos o método converValue(). |
| criarArrayNode() | ArrayNode | É usado para criar ArrayNode. |
| defaultClassIntrospector() | ClasseIntrospector | Se quisermos usar o ClassIntrospector padrão, usaremos este método auxiliar Overridable para construí-lo. |
| desativar (recurso DeserializationFeature) Métodos semelhantes:
| ObjectMapper | É usado para desabilitar DeserializationConfig, JsonGenerator.Features para instâncias do analisador, JsonParser.Features para instâncias do analisador do mapeador de objetos. |
| desativarDefaultTyping() | ObjectMapper | Muitas vezes, precisamos desabilitar a inclusão automática de informações de tipo, e para isso utilizamos este método. |
ativar (recurso DeserializationFeature)
| ObjectMapper | Ele é usado para habilitar o DeserializationConfig fornecido, JsonGenerator.Features para instâncias do analisador, JsonParser.Features para instâncias do analisador do mapeador de objetos. |
| enableDefaultTyping() Métodos semelhantes:
| ObjectMapper | Para usar a inclusão automática de informações de tipo para desserialização de tipos polimórficos, usamos este método para habilitá-la. |
| findAndRegisterModules() | ObjectMapper | É semelhante ao método mapper.registerModules(mapper.findModules()). |
| encontrarMódulos() Métodos semelhantes:
| Lista | É usado para localizar métodos disponíveis. O método usa o recurso JDK ServiceLoader com SPI fornecido pelo módulo. |
| getDateFormat() | Formato de data | É usado para obter o formato da data. |
| getDeserializationConfig() | DesserializaçãoConfig | É usado para obter o objeto DeserializationConfig padrão compartilhado. O objeto retornado define as definições de configuração para desserialização. |
| getDeserializationContext() | DesserializaçãoContexto | É usado para obter o DeserializationContext atual. |
| getFábrica() | JsonFábrica | Se o mapeador precisa construir um analisador e geradores Json, ele precisa de uma fábrica json e, para conseguir isso, usamos o método getFactory(). |
| getInjectableValues() | Valores Injetáveis | É usado para obter valores injetáveis. |
| getJsonFactory() | JsonFábrica | É um método obsoleto para obter a fábrica Json. |
| getNodeFactory() | JsonNodeFactory | Ele é usado para obter o JsonNodeFactory que é usado pelo mapeador no momento da construção direta de instâncias JsonNode raiz para árvores. |
| getPropertyNamingStrategy() | PropertyNamingStrategy | Como o nome indica, está habituado à estratégia de nomenclatura do imóvel. |
| getSerializationConfig() | SerializaçãoConfig | É usado para obter o objeto SerializationConfig padrão compartilhado. O objeto retornado define as definições de configuração para serialização. |
| getSerializerFactory() | Fábrica de serializadores | É usado para obter o SerializerFactory atual. |
| getSerializerProvider() | SerializerProvider | É um acessador da fábrica, que é usado para criar instâncias chamando DefaultSerializerProvider.createInstance(SerializationConfig, SerializerFactory). |
| getSerializerProviderInstance() | SerializerProvider | É um acessador usado para construir e retornar uma instância do SerializerProvider, que podemos usar para acessar serializadores. |
| getSubtypeResolver() | SubtypeResolver | É usado para acessar o resolvedor de subtipo em uso. |
| getTypeFactory() | TipoFábrica | É um acessador usado para obter uma instância do TypeFactory atualmente configurado. |
| getVisibilityChecker() | Verificador de Visibilidade | É usado para acessar o verificador de visibilidade atualmente configurado. |
| isEnabled (DesserializaçãoFeature f) Métodos semelhantes:
| boleano | O método isEnable() e suas variações são usados para verificar se determinado recurso específico de desserialização, JsonFactory, JsonGenerator, JsonParser, Mapper ou Serialization está habilitado ou não. |
| mixInCount() | interno | É usado para obter a contagem do mixIn. |
| leitor() Métodos semelhantes:
| Leitor de objetos | O método reader() e suas variações são os métodos de fábrica usados para construir uma instância do ObjectReader. Com base no requisito, podemos passar a variante de codificação Base64 para dados binários codificados em Base64, atributos padrão, recursos habilitados, valores injetáveis, JsonNodeFactory para construção de árvores JSON. |
| leitorFor (tipo de classe) | Leitor de objetos | É um método de fábrica usado para construir ObjectReader, permitindo operações de leitura ou atualização para instâncias do tipo especificado. |
| leitorFor (tipo JavaType) | Leitor de objetos | É um método de fábrica usado para construir ObjectReader, permitindo operações de leitura ou atualização para instâncias de JavaType especificado. |
| leitorFor (tipo TypeReference) | Leitor de objetos | É um método de fábrica usado para construir ObjectReader, permitindo operações de leitura ou atualização para instâncias de um determinado TypeReference. |
| leitorForUpdating (objeto valorToUpdate) | Leitor de objetos | É um método de fábrica usado para construir ObjectReader permitindo operações de atualização para um determinado objeto. |
| readerWithView (visualização de classe) | Leitor de objetos | É um método de fábrica usado para construir ObjectReader, permitindo desserialização de objetos com determinada visualização JSON. |
readTree(byte[] conteúdo)
| JSONNode OU T | O readTree() e suas variações são usados para desserializar o conteúdo JSON como uma árvore expressa usando um conjunto de instâncias JsonNode. |
| readValue(byte[] src, classe valueType) Métodos semelhantes
| T OU MapeamentoIterador | O readValue() e suas variações são usados para desserializar o conteúdo JSON
|
| readValues(JsonParser p, classe valueType) Métodos semelhantes:
| MapeamentoIterador | O readValues() e suas variações são usados para ler a sequência de objetos do fluxo do analisador. |
| registrarModule (módulo do módulo) Métodos semelhantes:
| ObjectMapper | O RegisterModule() e suas variações são usados para registrar um módulo que tem a capacidade de estender a funcionalidade fornecida pelo mapeador. |
| registrarSubtypes(NamedType... tipos) | vazio | É usado para registrar a classe fornecida como um subtipo. Ao fazer isso, a resolução baseada em nome de tipo pode vincular supertipos a subtipos. |
| setAnnotationIntrospector(AnnotationIntrospector ai) | ObjectMapper | É usado para definir AnnotationIntrospector, que é usado pela instância do mapeador para serialização e desserialização. |
| setAnnotationIntrospectors(AnnotationIntrospector serializerAI, AnnotationIntrospector deserializerAI) | ObjectMapper | É usado para alterar a instância do AnnotationIntrospector usada pela instância do mapeador atual para serialização e desserialização. |
| setBase64Variante(Base64Variante v) | ObjectMapper | É usado para configurar o Base64Variant padrão que será usado pelos serializadores e desserializadores byte[]. |
| setConfig(configuração DeserializationConfig) | ObjectMapper | Para realizar a substituição do objeto DeserializationConfig subjacente, usamos este método. |
| setConfig(configuração de serializaçãoconfig) | ObjectMapper | Para realizar a substituição do objeto SerializationConfig subjacente com configurações específicas de serialização, usamos este método. |
| setDateFormat(DateFormatdateFormat) | ObjectMapper | É usado para configurar o DateFormat padrão para usá-lo no momento de serializar valores de tempo como Strings ou desserializar de Strings JSON. |
| setDefaultPrettyPrinter(PrettyPrinter pp) | ObjectMapper | É usado para especificar o PrettyPrinter para usá-lo quando a 'impressão bonita padrão' estiver habilitada. |
| setDefaultTyping (digitador TypeResolverBuilder) | ObjectMapper | É utilizado para permitir a inclusão automática de informações de tipo. |
| setHandlerInstantiator(HandlerInstantiator oi) | Objeto | É usado para configurar HandlerInstantiator para uso na criação de instâncias de manipuladores. |
| setFilterProvider(FilterProvider filterProvider) | ObjectMapper | Ele é usado para configurar o mapeador atual para usar FilterProvider especificado para mapear IDs de filtro para instâncias de filtro reais. |
| setInjectableValues(InjectableValues injectableValues) | ObjectMapper | É usado para configurar InjectableValues, que é usado para encontrar valores a serem injetados. |
| setLocale(Locall) | ObjectMapper | É usado para substituir o código de idioma padrão a ser usado para formatação. |
| setMixInResolver (resolver ClassIntrospector.MixInResolver) | ObjectMapper | Usamos este método para especificar o resolvedor fornecido para localizar classes mixadas a serem usadas, substituindo os mapeamentos adicionados diretamente. |
| setMixInAnnotations(Mapa | vazio | É um método obsoleto para definir a anotação mix-in. |
| setNodeFactory(JsonNodeFactory f) | ObjectMapper | É usado para especificar JsonNodeFactory a ser usado na construção de nós de árvore no nível raiz. |
| setMixIns(Mapa | ObjectMapper | É usado para definir as anotações combinadas a serem usadas para aumentar as anotações que as classes processáveis possuem. |
| setPropertyInclusão(JsonInclude.Value incl) | ObjectMapper | É usado para definir a estratégia de inclusão de propriedade POJO padrão para serialização. |
| setPropertyNamingStrategy(PropertyNamingStrategys) | ObjectMapper | Ele é usado para definir a estratégia de nomenclatura de propriedade customizada a ser usada. |
| setSerializerFactory(SerializerFactory f) | ObjectMapper | É usado para definir o SerializerFactory específico a ser usado na construção de serializadores (bean). |
| setSerializerProvider(DefaultSerializerProviderp) | ObjectMapper | Ele é usado para definir a instância SerializerProvider 'blueprint' para usá-la como base para instâncias reais do provedor a serem usadas para lidar com o cache de instâncias JsonSerializer. |
| setSubtypeResolver(SubtypeResolverstr) | ObjectMapper | É usado para definir o resolvedor de subtipo personalizado a ser usado. |
| setTimeZone(TimeZone tz) | ObjectMapper | É usado para substituir o fuso horário padrão a ser usado para formatação. |
| setTypeFactory(TypeFactory f) | ObjectMapper | É usado para substituir a instância TypeFactory, que é usada pelo mapeador atual. |
setVisibility(PropertyAccessor forMethod, JsonAutoDetect.Visibility visibilidade)
| ObjectMapper | O setVisibility() e sua variação são usados para definir o VisibilityChecker atualmente configurado. A instância retornada do ObjectMapper é usada para verificar se o elemento de propriedade fornecido pode ser detectado automaticamente ou não. |
| treeAsTokens(TreeNoden) | JsonParser | É usado para construir um JsonParser a partir da representação da árvore JSON. |
| treeToValue (TreeNode n, classe valueType) | T | Ele é usado para vincular os dados que a árvore JSON contém em um tipo de valor específico. |
| versão() | Versão | É usado para obter as informações da versão armazenadas e lidas no jar que contém esta classe. |
escritor()
| Escritor de objetos | O write() e suas variações são usados para construir ObjectWriter com configurações padrão, dada a variante de codificação Base64 para dados binários codificados em Base64, detalhes de escape de caracteres para saída, atributos padrão, DateFormat, provedor de filtro, objeto de esquema para JsonGenerator usado para escrever conteúdo, impressora bonita para recuo ou recurso habilitado. |
| escritorFor (Classe rootType) - | Escritor de objetos | Ele é usado para construir ObjectWriter para serializar os objetos usando um tipo de raiz especificado em vez do tipo de valor de tempo de execução real. |
| escritorFor(JavaType rootType) | Escritor de objetos | Ele é usado para construir ObjectWriter para serializar os objetos usando um tipo de raiz especificado em vez do tipo de valor de tempo de execução real. |
| escritorFor (TypeReference rootType) | Escritor de objetos | Ele é usado para construir ObjectWriter para serializar os objetos usando um tipo de raiz especificado em vez do tipo de valor de tempo de execução real. |
| escritorWithDefaultPrettyPrinter() | Escritor de objetos | É um método de fábrica usado para construir ObjectWriter para serializar os objetos usando a impressora bastante padrão para recuo. |
escritorWithType(Classe rootType)
| Escritor de objetos | Esses métodos estão depreciados e, em vez deles, usamos o métodowriterFor(TypeReference). |
| escritorWithView (classe serializaçãoView) | Escritor de objetos | É um método de fábrica usado para construir ObjectWriter para serializar objetos usando a visualização JSON especificada. |
| writeTree (JsonGenerator jgen, JsonNode rootNode) | vazio | Ele é usado para serializar a árvore JSON fornecida usando o JsonGenerator fornecido. |
| writeValue (Arquivo resultadoArquivo, valor do objeto) | vazio | É usado para serializar o valor Java como saída JSON e gravá-lo no dado arquivo. |
| writeValue(JsonGenerator g, valor do objeto). | vazio | É usado para serializar valores Java como saída JSON usando o dado JsonGenerator. |
| writeValue (saída OutputStream, valor do objeto) | vazio | É usado para serializar o valor Java como saída JSON usando o dado Fluxo de saída. |
| writeValue(Escritor w, valor do objeto) | vazio | É usado para serializar valores Java como saída JSON usando o dado Escritor. |
| writeValueAsBytes (valor do objeto) | byte[] | É usado para serializar valores Java como uma matriz de bytes. |
| writeValueAsString (valor do objeto) | Corda | É usado para serializar valores Java como uma String. |
JacksonExample.java
//import required classes and package if any package javaTpoint.Jackson; import java.io.IOException; import java.util.List; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; //create class JacksonExample to understand implementation of Jackson public class JacksonExample { // main() method start public static void main(String args[]){ // create an instance of ObjectMapper class ObjectMapper mapper = new ObjectMapper(); // create a JSON string of employee details to deserilized object String stdString = '{
'students' : [
{
'stdId':'001',
'course':'MCA','+'
'firstName':'Nicholas',
'lastName':'Clemens',
'preferredFullName':'Nicholas Clemens','+'
'enrol':'S010',
'region':'indian',
'phoneNumber':'408-1234567',
'emailAddress''+':'[email protected]'
},
{
'stdId':'002',
'course':'BCA','+'
'firstName':'Sharon',
'lastName':'Lorenz',
'preferredFullName':'Sharon Lorenz','+'
'enrol':'S011',
'region':'indian',
'phoneNumber':'408-1111111',
'emailAddress''+':'[email protected]'
},
{
'stdId':'003',
'course':'Btech','+'
'firstName':'Brittany',
'lastName':'Hart',
'preferredFullName':'Brittany Hart',
''+'enrol':'S012',
'region':'indian',
'phoneNumber':'408-2222222',
'emailAddress':'[email protected]'
}
]
}'; try{ // use ObjectMapper for mapping JSON to Student Students students = mapper.readValue(stdString, Students.class); // print students System.out.println(students); // serialize students into json string stdString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(students); System.out.println(stdString); }catch (JsonParseException e) { e.printStackTrace(); }catch (JsonMappingException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } } //create Students class class Students { public List students; // getter and setter public List getStudent() { return students; } public void setStudent(List students) { this.students = students; } } class Student { // declare variables private String stdId; private String course; private String firstName; private String lastName; private String preferredFullName; private String enrol; private String region; private String phoneNumber; private String emailAddress; public Student(){ } // getter/setters for all variables public String getStdId() { return stdId; } public void setStdId(String stdId) { this.stdId = stdId; } public String getCourse() { return course; } public void getCourse(String course) { this.course = course; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getPreferredFullName() { return preferredFullName; } public void setPreferredFullName(String preferredFullName) { this.preferredFullName = preferredFullName; } public String getEnrol() { return enrol; } public void setEnrol(String enrol) { this.enrol = enrol; } public String getRegion() { return region; } public void setRegion(String region) { this.region = region; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getEmailAddress() { return emailAddress; } public void setEmailAddress(String emailAddress) { this.emailAddress = emailAddress; } public String toString(){ return 'Employee [ Student Id: '+stdId+', Course: '+course+ '' + ', First Name: '+firstName+ ', Last Name: '+lastName+ '' + ', Name: '+preferredFullName+ ', Enrol No: '+enrol+ '' + ', Region: '+region+ ', Phone Number: '+phoneNumber+ '' + ', Email Address: '+emailAddress+ ' ]'; } } Saída: