2016-03-09 4 views
1

Класс My Bean выглядит следующим образом. Когда происходит сопоставление, объект JSON содержит повторяющиеся значения.Дублирующие значения при использовании ObjectMapper от Jackson

Ответ:

{"Id":"00PJ0000003mOgMMAU","Name":"web.xml","name":"web.xml","id":"00PJ0000003mOgMMAU"} 

Почему значения становятся дублируются?

import org.codehaus.jackson.annotate.JsonIgnoreProperties; 
import org.codehaus.jackson.annotate.JsonProperty; 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class AttachmentsMapper 
{ 
    @JsonProperty(value = "Id") 
    private String Id; 

    @JsonProperty(value = "Name") 
    private String Name; 


    public String getId() { 
      return Id; 
     } 
    public void setId(String Id) { 
     this.Id = Id; 
    } 
    public String getName() { 
     return Name; 
    } 
    public void setName(String Name) { 
     this.Name = Name; 
    } 

} 

ответ

3

Он не печатает дубликаты одного и того же поля дважды, он печатает 2 разных поля, которые он находит. Джексон видит, что вы хотите напечатать "name", потому что у вас есть геттер под названием getName() и "Name", потому что вы аннотировали поле Name как @JsonProperty с помощью другого ключа. Он видит разные поля, потому что "name"! = "Name". Два решения:

  1. Переместить аннотацию на геттер. Поле игнорируется по умолчанию, поскольку оно является частным.

    @JsonProperty(value = "Name") 
    public String getName() { 
        return Name; 
    } 
    
  2. Используйте более позднюю версию Джексона, как вы, кажется, использует 1,8 из com.codehaus. Используйте 1.9 оттуда или даже лучше используйте последнюю версию от com.fasterxml. Я пробовал свой код, как и с 1.9, и он работал без перемещения аннотации.
Смежные вопросы