如果建立了一個model,但是經由action export,得到的是exception,或者不是你想要的結果。這時可以使用@JSONFieldBridge,也可以自行撰寫你想要回傳的值。
import org.apache.struts2.json.annotations.JSONFieldBridge; import org.apache.struts2.json.bridge.StringBridge; import org.bson.types.ObjectId; public class Car{ private ObjectId id; private String name; public void setId( ObjectId id ){ this.id = id; } @JSONFieldBridge( impl = StringBridge.class ) public ObjectId getId(){ return id; } public void setName( String name ){ this.name = name; } public String getName(){ return name; } }
其中StringBridge會直接呼叫toString這個method。若你想修改回傳結果,可以實做FieldBridge這個class。以下是一個簡單的example:
import org.apache.struts2.json.bridge.FieldBridge; import org.bson.types.ObjectId; public class ObjectIdFieldBridge implements FieldBridge{ @Override public String objectToString( Object obj ){ if( obj instanceof ObjectId ) return "sparrow_"+obj.toString(); return null; } }
JSONFieldBridge只有比較新版的struts才有,再來如果要回傳一個不是String type的值,似乎還沒有提供,只能解決一些比較簡單的需求,要不然只能自己組list。
如果export一個model,但又不想把某個欄位值,也一起export出去的話,可以使用@JSON(serialize = false)。
@JSON(serialize = false) public String getName(){ return name; }