代码应该向 writeValueAsString
方法传递类型为 A
的实例,而不是实际的类。
ObjectMapper
可以通过反射确定实例的类型,但如果您没有传递实例,则无法确定要放置在生成的 JSON 中的字段值。
同时确保捕获或抛出适当的异常。
public void save() {
try {
A a = new A();
ObjectMapper mapper = new ObjectMapper();
String temp = mapper.writeValueAsString(a);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
你还应该为类 A
和类 B
上的字段提供访问器。 注意:我在前一句中包含了 B
,因为 Jackson 必须能够映射我们提供给它的实例上的所有字段。
public A {
private List<B> b;
private int c;
private B getB(){ return b;}
private void setB(B b){this.b = b;}
private int getC(){return c;}
private void setC(int c){this.c = c;}
}
这是一个我已经测试过的完整可工作的例子。
import java.io.IOException;
import java.util.List;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class A {
private List<B> b;
private int c;
public List<B> getB() {
return b;
}
public void setB(List<B> b) {
this.b = b;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
A a = new A();
ObjectMapper mapper = new ObjectMapper();
String temp = mapper.writeValueAsString(a);
System.out.println(temp);
}
}
class B{
}
如果这个简单的示例无法工作,则很可能没有在构建路径上找到
jackson-mapper-asl.jar
文件。请从
此处下载文件,并将其放置在本地计算机的某个位置。
接下来,在Eclipse中,右键单击您的项目并选择属性。
然后选择“构建路径” > “库” > “添加外部Jars”。定位jar然后点击“确定”。
@JsonProperty
注释(Jackson遵循Bean约定,默认情况下仅序列化公共字段,而忽略私有字段)。 - StaxMan