我遇到了Jackson序列化User Box對象的問題。 有一些私人領域與getter和setters。一切工作正常,當我做這樣的事情:Jackson 2和Spring Autowired bean
public String json() {
MyUser user = new MyUser();
user.setUsername("myName");
return mapper.writeValueAsString(user); // Valid JSON
}
但我想自動裝配用戶對象與Spring框架:
@Autowired
private MyUser user;
public String json() {
System.out.println(user.getUsername()); // Property set before and it works
return mapper.writeValueAsString(user); // Error
}
這是行不通的。我有一個錯誤:
com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.apache.juli.OneLineFormatter and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)) (through reference chain: com.piggymetrics.classes.PiggyUser$$EnhancerBySpringCGLIB$$5f23855e["targetSource"]->org.springframework.aop.target.SimpleBeanTargetSource["beanFactory"]->org.springframework.beans.factory.support.DefaultListableBeanFactory["parentBeanFactory"]->org.springframework.beans.factory.support.DefaultListableBeanFactory["beanClassLoader"]->org.apache.catalina.loader.WebappClassLoader["resources"]->org.apache.catalina.webresources.StandardRoot["context"]->org.apache.catalina.core.StandardContext["logger"]->org.apache.juli.logging.DirectJDKLog["logger"]->java.util.logging.Logger["parent"]->java.util.logging.Logger["handlers"]->org.apache.juli.AsyncFileHandler["formatter"])
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:59)
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:26)
,當我嘗試忽略這些未知的錯誤
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
我得到了一個無限遞歸:
com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: org.apache.catalina.core.StandardEngineValve["container"]->org.apache.catalina.core.StandardEngine["pipeline"]->org.apache.catalina.core.StandardPipeline["basic"]->org.apache.catalina.core.StandardEngineValve["container"]
...
看起來像春天做錯了什麼用自動裝配的MyUser實例,所以傑克遜無法序列化它。
有沒有辦法解決它?
UPDATE
MYUSER類是非常簡單的:
package com.metrics.classes;
import com.metrics.classes.interfaces.User;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyUser implements User {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
您的用戶是否包含對用戶有引用的字段? – JEY 2015-03-31 15:03:33
請分享你的MyUser類 – Mithun 2015-03-31 15:10:07
我已經更新了我的問題whit MyUser類。謝謝。 – 2015-03-31 15:22:19