The code should pass an instance of Type A
to the writeValueAsString
method not the actual class.
The ObjectMapper
will be able to determine the instance's type via reflection, however if you don't pass an instance it cannot determine the field value's to place in the generated JSON.
Also be sure to catch or throw the appropriate exceptions.
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();
}
}
You should also have acessors for the fields on class A
and class B
. NOTICE I included B
in the previous sentence, since Jackson must be able to map all fields on the instance we provide to it.
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;}
}
Here is a complete working example that I have tested.
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{
}
If this simple example does not work the jackson-mapper-asl.jar
file is most likely not on the build path. Download the file from here and place it somewhere on your local machine.
Next via Eclipse, Right Click on your Project and select properties.
Then select Build Path > Libraries > Add External Jars. Locate the jar and then hit OK.
@JsonProperty
annotations next to private fields (Jackson follows Bean convention, and private fields are ignored, only public fields serialized by default). – Evidentiary