如何轻松地将JSON转换为字符串以进行日志记录

时间:2012-05-01 14:49:03

标签: java json rest jackson

我会尽力解释我想要完成的事情。

我正在编写Web应用程序的后端,它使用REST API提取用于客户端报表的数据。 我正在编写的框架使用Codehaus jackson来解析从JSON到数据对象(数据bean)的请求。 我有一堆这样的API,10-15。 他们每个人从客户端获得一个不同的请求对象(尽管存在一些继承)。 我想要做的是为每个API添加日志记录(使用log4j),这样当我输入每个方法时,将记录请求数据对象。 简单的解决方案是为每个这些数据对象实现一个toString()方法,但我想避免遍历所有这些数据对象,看看是否有类似于jackson将JSON解析为对象的方式的解决方案。 即将对象转换回其文本格式,以便将其放入日志中。

我认为有这么简单的方法。

这是REST API及其数据bean的示例:

@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并记录它。

2 个答案:

答案 0 :(得分:2)

可能这可能有效

new ObjectMapper().writeValue(System.out, dataBeanExampleInstance)

writeValueAsString

答案 1 :(得分:-3)

你知道吗:

JSON.stringify