2016-12-17 3 views
1

Apache Avro GenericRecordから変数値を抽出していますので、文字列変数の値はnullではなく "null"になります。nullの代わりに "null" Stringをチェックするユーティリティが組み込まれていますか?

GenericRecord payload = decoder.decode(record.value()); 
String userid = String.valueOf(payload.get("userId")); 
// here userid is null string as "null" 
System.out.println(Strings.isNullOrEmpty(userid)); 

そして、そのせいで「ヌル」文字列、私のsysoutプリントアウトとして偽の。これをチェックして "true"と表示させるにはどうすればいいですか?bcoz stringは空文字列です。そこには、それを行うか、私自身の ".equals"チェックを書かなければなりません。

+1

根本原因を修正する必要があります。 "null"は有効な文字列です.GenericRecordから 'null 'でなく' null'を取得してください。 [Mr Null](https://www.wired.com/2015/11/null/)に感謝いたします。 –

+0

私はそれがAvroスキーマが定義されている方法である可能性があることを疑います。 –

答えて

1

おそらくString.valueOf(...)メソッドで"null"文字列を自分で生成します。 String#valueOfのJavaDocをから:

戻り値: 引数がnullの場合は、「ヌル」に等しい文字列。それ以外の場合は、obj.toString()の値が返されます。これは、それを生成しないことにより、"null"文字列との比較の問題を防ぐ

GenericRecord payload = decoder.decode(record.value()); 
    boolean isNull = payload.get("userId") == null; 
    if (!isNull) { 
     String userid = payload.get("userId").toString(); 
    } 

はこのように、私は次のコードを使用することをお勧めします。

+0

はい、あなたは正しいです。それは 'String.valueOf'から来ていました –

1

"null"は平文の文字列型です。ちょうどStringのAPIを使用してください:.equals("null")は大丈夫です。

関連する問題