我使用Datastax驱动程序获取Cassandra表中的一行:
MappingManager manager = new MappingManager(session);
Mapper<CassandraEntity> mapper = manager.mapper(CassandraEntity.class);
UUID id = UUID.fromString(uuid);
CassandraEntity cassandraEntity = mapper.get(id);
当表中存在uuid时,一切正常。但是当uuid不存在时,我有这个错误:
ERROR [2017-01-27 14:27:24,030] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: 48a3bf442525acf8
! java.lang.NumberFormatException: For input string: "68c34e83db3o"
! at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.7.0_75]
! at java.lang.Long.parseLong(Long.java:441) ~[na:1.7.0_75]
! at java.lang.Long.valueOf(Long.java:513) ~[na:1.7.0_75]
! at java.lang.Long.decode(Long.java:665) ~[na:1.7.0_75]
! at java.util.UUID.fromString(UUID.java:206) ~[na:1.7.0_75]
如何很好地管理此错误?
答案 0 :(得分:1)
const countryChartOptions = {
hover: {
onHover: this.onChartHover,
},
};
const onHover = (activeElements) => {
console.log(activeElements);
};
不是有效的UUID,因此UUID.fromString
抛出此异常,javadocs状态:
抛出:
IllegalArgumentException - 如果name不符合字符串? toString()
中描述的表示
NumberFormatException
是IllegalArgumentExcepiton
的一个实例。
在将68c34e83db3o
传递给uuid
之前,您如何形成fromString
?在调用fromString
之前,您可能需要进行一些格式化/实例化。 68c34e83db3o
几乎看起来像一个十六进制字符串(除了最后一个字符串)。
答案 1 :(得分:1)
c37d661d-7e61-49ea-96a5-68c34e83 db3o 不是有效的UUID。 UUID的十六个八位字节表示为32个小写十六进制(基数16)数字,以连字符分隔的五个组显示,形式为8-4-4-4-12,共36个字符(32个字母数字和4个字符)连字符)。所以:
但c37d661d-7e61-49ea-96a5-68c34e83 db3 g 不有效的UUID,c37d661d-7e61-49ea-96a5-68c34e83 DB3的 0 强>
要快速检查UUID是否有效,您可以使用此小提琴:https://jsfiddle.net/mshaffer/6e2Ljh97
正如Andy Tolbert所说,当UUID无效时,UUID.fromString
方法会抛出IllegalArgumentException。要处理此异常,请使用How to judge a string is UUID type?:
try{
UUID uuid = UUID.fromString(someUUID);
//do something
} catch (IllegalArgumentException exception){
//handle the case where string is not valid UUID
}