2017-01-27 16 views
3

я использую драйвер Datastax для извлечения строки в таблице Кассандры:java.lang.NumberFormatException при попытке извлечь строку в таблице Кассандры

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] 

Как я могу прекрасно справиться с этой ошибкой?

ответ

1

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 db3 г является не действительным UUID, ни c37d661d-7e61-49ea-96a5 -68c34e83 db3 о

Чтобы быстро проверить, если UUID действителен вы можете использовать эту скрипку: https://jsfiddle.net/mshaffer/6e2Ljh97

Как сказал Энди Тольберт, когда 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 
} 
1

68c34e83db3o не является допустимым UUID так UUID.fromString бросает это исключение, состояние JavaDocs:

Броски:

IllegalArgumentException - Если имя не соответствует строке? представление, как описано в toString()

NumberFormatException - пример IllegalArgumentExcepiton.

Как вы образовывали uuid перед передачей его в fromString? Возможно, вам понадобится выполнить форматирование/сантизацию, прежде чем звонить fromString. 68c34e83db3o почти выглядит как шестнадцатеричная строка (за исключением последнего o).

+0

Благодарим вас за этот опрос. Я использую Dropwizard для вызова выборки в базе данных.Я не формирую uuid, прежде чем передавать его в String. Uuid - это параметр метода connect (@QueryParam ("uuid") String 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 У меня есть ошибка, которую я описал – Denis