java.lang.NumberFormatException 尝试在 Cassandra 中获取一行时 table
java.lang.NumberFormatException when trying to fetch a line in a Cassandra table
我使用 Datastax 驱动程序在 Cassandra 中获取一行 table :
MappingManager manager = new MappingManager(session);
Mapper<CassandraEntity> mapper = manager.mapper(CassandraEntity.class);
UUID id = UUID.fromString(uuid);
CassandraEntity cassandraEntity = mapper.get(id);
当 uuid 存在于 table 中时,一切正常。但是当 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]
我怎样才能很好地处理这个错误?
68c34e83db3o
不是有效的 UUID,因此 UUID.fromString
抛出此异常,javadocs 状态:
Throws:
IllegalArgumentException - If name does not conform to the string ? representation as described in toString()
NumberFormatException
is an instance of IllegalArgumentExcepiton
.
在将 uuid
传递给 fromString
之前,您是如何形成的?在调用 fromString
之前,您可能需要做一些 formatting/santization。 68c34e83db3o
几乎看起来像一个十六进制字符串(除了最后一个 o)。
c37d661d-7e61-49ea-96a5-68c34e83 db3o 不是 有效的 UUID。 UUID 的十六个八位字节表示为 32 个小写十六进制(基数 16)数字,以连字符分隔的五组显示,格式为 8-4-4-4-12,总共 36 个字符(32 个字母数字字符和四个连字符)。所以:
- c37d661d-7e61-49ea-96a5-68c34e83 db3a 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3b 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3c 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3d 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3e 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3f 是一个有效的 UUID
但是 c37d661d-7e61-49ea-96a5-68c34e83 db3g 不是 有效的 UUID 也不是 c37d661d- 7e61-49ea-96a5-68c34e83 db3o
要快速检查 UUID 是否有效,您可以使用此 Fiddle: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
}
我使用 Datastax 驱动程序在 Cassandra 中获取一行 table :
MappingManager manager = new MappingManager(session);
Mapper<CassandraEntity> mapper = manager.mapper(CassandraEntity.class);
UUID id = UUID.fromString(uuid);
CassandraEntity cassandraEntity = mapper.get(id);
当 uuid 存在于 table 中时,一切正常。但是当 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]
我怎样才能很好地处理这个错误?
68c34e83db3o
不是有效的 UUID,因此 UUID.fromString
抛出此异常,javadocs 状态:
Throws:
IllegalArgumentException - If name does not conform to the string ? representation as described in toString()
NumberFormatException
is an instance of IllegalArgumentExcepiton
.
在将 uuid
传递给 fromString
之前,您是如何形成的?在调用 fromString
之前,您可能需要做一些 formatting/santization。 68c34e83db3o
几乎看起来像一个十六进制字符串(除了最后一个 o)。
c37d661d-7e61-49ea-96a5-68c34e83 db3o 不是 有效的 UUID。 UUID 的十六个八位字节表示为 32 个小写十六进制(基数 16)数字,以连字符分隔的五组显示,格式为 8-4-4-4-12,总共 36 个字符(32 个字母数字字符和四个连字符)。所以:
- c37d661d-7e61-49ea-96a5-68c34e83 db3a 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3b 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3c 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3d 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3e 是一个有效的 UUID
- c37d661d-7e61-49ea-96a5-68c34e83 db3f 是一个有效的 UUID
但是 c37d661d-7e61-49ea-96a5-68c34e83 db3g 不是 有效的 UUID 也不是 c37d661d- 7e61-49ea-96a5-68c34e83 db3o
要快速检查 UUID 是否有效,您可以使用此 Fiddle: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
}