我有一个 Java 类 pojo,其中我希望 Object.toString() 方法返回对象的 JSON 表示。toString() 的用户只需要 JSON。这是我的 toString()。
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
@Override
public String toString(){
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = null;
try {
json = ow.writeValueAsString(this);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return json;
}
问题是上面的代码会吞下异常并允许继续执行。为避免此类问题,我们可以抛出异常或将异常作为未检查异常重新抛出,如此处Java 所述 - 覆盖 Object 的 toString() 方法,但我必须抛出异常。
但是, toString() 不允许我们抛出异常。所以,我们只能抛出一个未经检查的异常。上面链接的选定答案说“从 toString() 抛出异常是一个非常糟糕的主意”。它建议返回一个错误字符串,这对我来说似乎很糟糕,因为我们实际上只是在吞下异常。另一个建议是抛出 IllegalStateException 。这是在这种情况下抛出的理想异常还是我们应该抛出另一个异常?谢谢。
更新:我更正了代码中的一个错误。toString() 方法不带参数。
我还建议不要从toString
. 该方法通常用于调试目的(无论是通过System.out
还是使用调试器)。抛出异常只会使事情复杂化并使一切变得更加困难。
相反,我建议添加一个toJSON
抛出 JsonProcessingException 或 RuntimeException(的子类)的方法,并实现 toString 以便它调用 toJson,捕获所有异常并在这种情况下返回错误消息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句