2012-01-13 6 views
1

私はいくつかのアクセサメソッドを持つハッシュテーブルであるモデルを作成しようとしています。モデルはそうそうです...Playフレームワーク:モデルのハッシュテーブル?

public class MyHash(){ 
    Hashtable<Integer, CustomObject> hash = new Hashtable<Integer,CustomObject>(); 
    //few accessor methods here... 
} 

このクラスは別のモデルの内部で使用されます。他のモードはそう...

this.hash = new MyHash(); 

次の例外が発生した...

Internal Server Error (500) for request POST /login 

Execution exception (In /app/controllers/Security.java around line 70) 
IllegalArgumentException occured : No serializer found for class models.MyHash and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)) (through reference chain: User["hash"]) 

play.exceptions.JavaExecutionException: No serializer found for class models.MyHash and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)) (through reference chain: User["hash"]) 
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:231) 
at Invocation.HTTP Request(Play!) 
Caused by: java.lang.IllegalArgumentException: No serializer found for class models.ListOfFilters and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)) (through reference chain: User["hash"]) 
at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:1784) 
at org.codehaus.jackson.map.ObjectMapper.convertValue(ObjectMapper.java:1750) 
at play.modules.mongo.MongoMapper.convertValue(MongoMapper.java:12) 
at play.modules.mongo.MongoDB.save(MongoDB.java:239) 
at models.User.save(User.java) 
at controllers.Security.createNewUser(Security.java:70) 
at controllers.Security.authenticate(Security.java:36) 
at play.utils.Java.invokeStaticOrParent(Java.java:161) 
at play.utils.Java.invokeChildOrStatic(Java.java:183) 
at controllers.Secure$Security.invoke(Secure.java:187) 
at controllers.Secure$Security.access$0(Secure.java:184) 
at controllers.Secure.authenticate(Secure.java:64) 
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548) 
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502) 
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478) 
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473) 
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161) 
... 1 more 
Caused by: org.codehaus.jackson.map.JsonMappingException: No serializer found for class models.MyHash and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)) (through reference chain: User["hash"]) 
at org.codehaus.jackson.map.ser.StdSerializerProvider$1.serialize(StdSerializerProvider.java:62) 
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268) 
at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:160) 
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:131) 
at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:297) 
at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:224) 
at org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:1030) 
at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:1777) 
... 17 more 
+0

もう少し背景を提供できますか?私はあなたがMyHashクラスで何をしようとしているのか、モデル派生クラスそのもの(モデルだと言っていますが、 'Model'を拡張していません)をよく理解していません。 – craigmj

+0

ご迷惑をおかけして申し訳ありません。私はそれを使用してユーザーのハッシュテーブルを格納し、モデルを拡張するクラス 'User'の変数として使用します。 – Skizit

答えて

1

のようにその変数を開始すると、私は、これは途中でそこにあなたを取得すると思います:How do I use JPA to persist a Map (java.util.Map) object inside an entity and ensure the persistence cascades?

をしかし、あなたは意志MyHash自体をシリアライズ可能にする必要があります。そのため、フレームワークはdbに格納する方法を知っています:@Entity自体になる必要があります。

0

MyHashクラスに@JsonAutoDetectを追加してみてください。詳細はjackson docsをご確認ください。

また、craigmjが示唆するように、ハッシュマップを適切にマップする必要があります。

関連する問題