尝试获取Cassandra表中的行时发生java.lang.NumberFormatException

尝试获取Cassandra表中的行时发生java.lang.NumberFormatException,java,dropwizard,datastax-java-driver,Java,Dropwizard,Datastax Java Driver,我使用Datastax驱动程序获取Cassandra表中的一行: MappingManager=新的MappingManager(会话); Mapper Mapper=manager.Mapper(CassandraEntity.class); UUID id=UUID.fromString(UUID); CassandraEntity CassandraEntity=mapper.get(id); 当表中存在uuid时,一切正常。但当uuid不存在时,我有以下错误: ERROR[2017-0

我使用Datastax驱动程序获取Cassandra表中的一行:

MappingManager=新的MappingManager(会话);
Mapper Mapper=manager.Mapper(CassandraEntity.class);
UUID id=UUID.fromString(UUID);
CassandraEntity CassandraEntity=mapper.get(id);
当表中存在uuid时,一切正常。但当uuid不存在时,我有以下错误:

ERROR[2017-01-27 14:27:24030]io.dropwizard.jersey.errors.LoggingExceptionApper:处理请求时出错:48a3bf442525acf8
! java.lang.NumberFormatException:对于输入字符串:“68c34e83db3o”
! 在java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)~[na:1.7.0_75]
! 在java.lang.Long.parseLong(Long.java:441)~[na:1.7.0_75]
! 在java.lang.Long.valueOf(Long.java:513)~[na:1.7.0_75]
! 在java.lang.Long.decode(Long.java:665)~[na:1.7.0_75]
! 在java.util.UUID.fromString(UUID.java:206)~[na:1.7.0_75]

如何很好地管理此错误?

68c34e83db3o
不是有效的UUID,因此引发此异常,javadocs状态:

抛出:

IllegalArgumentException-如果名称与字符串不符?如toString()中所述的表示形式

是的一个例子


在将uuid传递到
fromString
之前,您是如何形成它的?在调用
fromString
之前,您可能需要进行一些格式化/转换<代码>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是否有效,可以使用以下工具:
https://jsfiddle.net/mshaffer/6e2Ljh97

正如Andy Tolbert所说,当UUID无效时,
UUID.fromString
方法抛出一个IllegalArgumentException。要处理此异常,请使用以下地址提供的解决方案:


谢谢你的回答。我使用Dropwizard调用数据库中的fetch。在将uuid传递到fromString之前,我不会生成它。uuid是方法connect的参数(@QueryParam(“uuid”)字符串uuid)。UUID c37d661d-7e61-49ea-96a5-68c34e83db3a存在于我的表中。所以当我点击localhost:8080/connect?uuid=c37d661d-7e61-49ea-96a5-68c34e83‌​‌​db3a我没有错误。相反,我的表中不存在UUID c37d661d-7e61-49ea-96a5-68c34e83db3o。然后当我点击localhost:8080/connect?uuid=c37d661d-7e61-49ea-96a5-68c34e83‌​‌​db3o我有我描述的错误
try{
    UUID uuid = UUID.fromString(someUUID);
    //do something
} catch (IllegalArgumentException exception){
   //handle the case where string is not valid UUID 
}