My Bean类如下。映射发生时,JSON对象包含重复值。
响应:
Addresss | Value | Comment
========================
0058 | 2 | argc
0060 | 02100 | argv (value is the memory address of "argv[0]")
...
02100 | 02116 | argv[0] (value is the memory address of "argv[0][0]")
02104 | 02300 | argv[1] (value is the memory address of "argv[1][0]")
...
02116 | '.' | argv[0][0]
02117 | '/' | argv[0][1]
02118 | 'm' | argv[0][2]
02119 | 'y' | argv[0][3]
02120 | 'p' | argv[0][4]
02121 | 'r' | argv[0][5]
02122 | 'o' | argv[0][6]
02123 | 'g' | argv[0][7]
02124 | '\0' | argv[0][8]
...
02300 | 'a' | argv[1][0]
02301 | 'r' | argv[1][1]
02302 | 'g' | argv[1][2]
02303 | '\0' | argv[1][3]
为什么值会重复?
{"Id":"00PJ0000003mOgMMAU","Name":"web.xml","name":"web.xml","id":"00PJ0000003mOgMMAU"}
答案 0 :(得分:4)
它不打印两次相同的字段,它会打印出它找到的2个不同的字段。杰克逊认为您要打印teams[0]; // team #1
teams[1]; // team #2
teams[n]; // team #n + 1
,因为您有一个名为"name"
和getName()
的吸气剂,因为您已使用不同的密钥将"Name"
字段注释为Name
。它会看到不同的字段,因为@JsonProperty
!= "name"
。两种解决方案:
将注释移动到getter。默认情况下会忽略该字段,因为它是私有的。例如
"Name"
@JsonProperty(value = "Name")
public String getName() {
return Name;
}
中的1.8。从那里使用1.9甚至更好地使用com.codehaus
中的最新版本。我尝试使用1.9代码,但无需移动注释即可使用。答案 1 :(得分:0)
在Jackson 2中,尝试禁用所有源(getter,setter,field等)的Jackson可见性,然后仅启用对象字段的可见性:
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
...
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);