2015-12-10 113 views
0

我試圖使用序列傑克遜Java中的對象,但是當我試圖序列化,它給了我這個錯誤序列化對象到JSON:無法使用傑克遜

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; 
    } 
+0

什麼是'FileInfo'?你如何期望傑克遜序列化它? –

+0

傑克遜爲什麼不應該序列化它?當im將對象傳遞給序列化程序時,files字段爲空。 –

回答

1

看起來你對你的一個類有java.io.FileDescriptor參考。

By default, Jackson will only work with with fields that are either public, or have a public getter methods – serializing an entity that has all fields private or package private will fail

如果你看看java.io.FileDescriptor的源代碼,你可以see 有沒有公衆的干將私人領域。

您應該配置您的objectMapper可見性以允許訪問私有字段。

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

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

謝謝,我不使用fileDescriptro,但將ObectWriter更改爲ObjectMapper並設置可見性解決了問題。 –

0

我面臨的問題將對象發送到Thymeleaf模板,ResponseEntity這是給我的異常「的StackOverflowError」序列化時,你的筆記「@JsonIgnore //避免遞歸調用」解決我的問題。謝謝

+1

這不提供問題的答案。你可以[搜索類似的問題](// stackoverflow.com/search),或者參考頁面右側的相關和鏈接問題來找到答案。如果你有一個相關但不同的問題,請[提出一個新問題](// stackoverflow.com/questions/ask),幷包含一個鏈接來幫助提供上下文。請參閱:[提問,獲得答案,沒有分心](// stackoverflow.com/tour) – sudo