Existe uma maneira de usar o processador Jackson JSON para fazer a serialização em nível de campo personalizado? Por exemplo, eu gostaria de ter a aula
public class Person {
public String name;
public int age;
public int favoriteNumber;
}
serializado para o seguinte JSON:
{ "name": "Joe", "age": 25, "favoriteNumber": "123" }
Observe que age = 25 é codificado como um número, enquanto favoriteNumber = 123 é codificado como uma string . Fora da caixa, Jackson comanda int
um número. Neste caso, quero que favoriteNumber seja codificado como uma string.
java
json
serialization
jackson
Steve Kuo
fonte
fonte
Respostas:
Você pode implementar um serializador personalizado da seguinte maneira:
Java deve lidar com o autoboxing de
int
paraInteger
para você.fonte
as=String.class
é ignorada devido aousing
parâmetro e não é necessária aqui. Nota: se using () também for usado, ele tem precedência (uma vez que especifica diretamente o serializador, ao passo que isso só seria usado para localizar o serializador) e o valor desta propriedade de anotação é ignorado.Person implements ToJson
?as=String.class
peça, pelos tipos que usei. @kevin-bowersox, sugiro atualizar seu comentário, de acordo com o que @GarethLatty disse.Jackson-databind (pelo menos 2.1.3) fornece especial
ToStringSerializer
(com.fasterxml.jackson.databind.ser.std.ToStringSerializer
)Exemplo:
fonte
jackson-annotations fornece o
@JsonFormat
que pode lidar com muitas personalizações sem a necessidade de escrever o serializador personalizado.Por exemplo, solicitar uma
STRING
forma para um campo com tipo numérico resultará no valor numérico como stringresultará na saída desejada
fonte
Adicione um
@JsonProperty
getter anotado, que retorna umString
, para ofavoriteNumber
campo:fonte
Caso você não queira poluir seu modelo com anotações e queira realizar algumas operações customizadas, você pode usar mixins.
Substituir idade:
Faça o que for preciso com a idade:
fonte
com a ajuda de @JsonView podemos decidir campos de classes de modelo para serializar que satisfaçam os critérios mínimos (temos que definir os critérios) como podemos ter uma classe principal com 10 propriedades, mas apenas 5 propriedades podem ser serializadas que são necessárias para o cliente só
Defina nossas visualizações simplesmente criando a seguinte classe:
Classe de modelo anotada com vistas:
Agora temos que escrever um conversor json personalizado simplesmente estendendo a classe HttpMessageConverter do spring como:
Agora é necessário dizer ao spring para usar este json convert personalizado simplesmente colocando-o em dispatcher-servlet.xml
É assim que você poderá decidir quais campos serão serializados.
fonte