私ができる限り明確に達成しようとしていることを説明しようとします。JSONをロギング目的の文字列に簡単に変換する方法
私は、クライアント側のレポートに使用されるデータを抽出するためにREST APIを使用するWebアプリケーションのバックエンドを作成しています。 私が書いているフレームワークは、JSONからデータオブジェクト(データbean)へのリクエストを解析するためにCodehaus jacksonを使用しています。 私はこの種のAPIの束を10-15持っています。 それぞれはクライアント側から別の要求オブジェクトを取得します(ただし、継承は存在します)。 私がしたいのは、これらのAPIのそれぞれにログを追加することです(log4jを使用して)ので、それぞれのメソッドを入力すると、リクエストデータオブジェクトがログに記録されます。 これらのデータオブジェクトのそれぞれに対してtoString()メソッドを実装するのが簡単な解決策ですが、これらのデータオブジェクトをすべて調べずに、jacksonがJSONをオブジェクトとして解析する方法。 オブジェクトをログに書き込むためにテキスト形式に変換し直してください。
私はそう簡単な方法があると思います。
この
は、RESTのAPIの一例であり、そのデータ豆:@POST
@Path("/path123/")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response getSomeData(@Context HttpServletRequest httpServletRequest, DataBeanExample bean){
DataBeanExample resultBean;
//DO SOME STUFF , for example take the bean, extract parameters from it and call some other api.
return Response.ok(resultBean, MediaType.APPLICATION_JSON).build();
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "DataBeanExample")
public class DataBeanExample{
@XmlElement(name = "timeFrame", required = true)
private String timeFrame = "";
@XmlElement(name = "timeFrom",required = true)
private long timeFrom;
@XmlElement(name = "timeTo",required = true)
private long timeTo;
public String getTimeFrame() {
return timeFrame;
}
public void setTimeFrame(String timeFrame) {
this.timeFrame = timeFrame;
}
public long getTimeTo() {
return timeTo;
}
public void setTimeTo(long timeTo) {
this.timeTo = timeTo;
}
public long getTimeFrom() {
return timeFrom;
}
public void setTimeFrom(long timeFrom) {
this.timeFrom = timeFrom;
}
}例では
、「getSomeData」の冒頭である私がやりたいオブジェクトBeanを取りますログに記録する。
ありがとう、writeValueAsStringを試しました。欲しい –