私はこれを試しました:
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiResponse;
import com.wordnik.swagger.annotations.ApiResponses;
import org.apache.commons.lang.Validate;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.print.attribute.standard.Media;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
import java.io.Serializable;
public static class MyJSON implements Serializable {
private final String name = "myname";
// **Why don't I get this field serialized in the response?**
private final JSONObject jsonObject = new JSONObject();
public MyJSON() {
try {
jsonObject.put("mykey", "myvalue");
} catch (JSONException e) {
e.printStackTrace();
}
}
public String getName() { return name; }
public JSONObject getJsonObject() { return jsonObject; }
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Get all entities", notes = "get all entities", response = Response.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK status"),
public Response getList() {
return Response.ok(new MyJSON(), MediaType.APPLICATION_JSON).build();
}
私が得る応答:
{
"name": "myname"
}
name
ご覧のとおり、フィールドMyJSON
なしのフィールドのみを取得しjsonObject
ます。
jsonObject
フィールドもシリアル化するにはどうすればよいですか?
アップデート:
トーマスのコメントを読んだ後、私は地図を使ってみました:
public static class MyJSON implements Serializable {
private final String name = "myname";
private final Map somefield = new HashMap();
public String getName() { return name; }
public Map getSomefield() { return somefield; }
public void addOther(String key, String value) {
somefield.put(key, value);
}
}
MyJSON myJSON = new MyJSON();
myJSON.addOther("mhykey", "myvalue");
return Response.ok(myJSON, MediaType.APPLICATION_JSON).build();
今、私は再び得る:
{
"name": "myname" // where is the other field? (the map)
}
なぜシリーズ化しないのだろうか?json はあるシナリオでは特定のフィールド、別のシナリオでは他のフィールドで異なる可能性があるため、特定のオブジェクトを使用できないことに注意してください。そのような場合ごとに新しいクラスを作成することはできません。