无法使用Jackson将Object序列化为Json

时间:2015-12-10 14:26:57

标签: java json serialization jackson

我正在尝试使用Jackson序列化Java中的对象,但是当我尝试序列化它时,它给了我这个错误:

No serializer found for class java.io.FileDescriptor and no properties discovered to create BeanSerializer

I tried this post, but it didn't help.

这是我正在尝试序列化的课程:

public class Repository {
    public String name;
    @JsonIgnore   // to avoid recursive calls
    public ArrayList<UserRole> contributors = new ArrayList<UserRole>();
    public User self;
    public ArrayList<FileInfo> files;
    public RepositoryType repositoryType;
    public String path;
}

我还尝试为每个字段创建getter / setter但仍然没有。

这是我的序列化方法:

public static String convertObjectToJson(Object object) throws IOException {
        ObjectWriter objectWriter = new ObjectMapper().writer().withDefaultPrettyPrinter();
        String json = objectWriter.writeValueAsString(object); //error on this line
        return json;
    } 

2 个答案:

答案 0 :(得分:1)

您的某个类似乎有java.io.FileDescriptor引用。

  

默认情况下,Jackson只能使用公共字段或具有公共getter方法的字段 - 序列化所有字段为私有或包私有的实体将失败

如果您查看java.io.FileDescriptor的源代码,可以stub 有没有公​​共吸气剂的私人田地。

您应该配置objectMapper可见性以允许访问私有字段。

// For jackson 2.*
objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

// For jackson lower than 2
objectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);

答案 1 :(得分:0)

我遇到了使用ResponseEntity将对象发送到Thymeleaf模板的问题它在序列化时给了我异常“StackOverFlowError”并且你的注释“@JsonIgnore //以避免递归调用”解决了我的问题。感谢