struts2 json field bridge

如果建立了一個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; }