2017-01-19 5 views
3

retorfit2 POST要求応答から文字列を削除したい。改造応答から不要な文字列を削除する

これは私の応答です:何らかのセキュリティ上の理由私のサーバーが自動的に私はJSONに変換するには、文字列

/*-secure-、これのbeacuse */

を追加することに

/*-secure-{"response":{"response":{"response":{"token":"95a2c5a8","email":"[email protected]","name":"xxx"},"status":true,"code":0.0},"status":200},"status":200}*/ 

エラー

com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 2 path $ 
+0

を参照してください。それは最初と最後に安全な部分を取り除き、有効なJSON残りを実際のGsonコンバータに委譲します。 Jake Whartonも同様のアプローチを彼の講演で概説しました。https://youtu.be/t34AQlblSeE?t=27m28s – peitek

+0

@peitek Gsonカスタムコンバーターが働いています。 –

+0

あなたは最後に何をしたのですか? – FrankR

答えて

2

マイカスタムgsonコンバータクラス

final class CustomGsonResponseBodyConverter<T> implements Converter<ResponseBody, T> { 
    private final Gson gson; 
    private final TypeAdapter<T> adapter; 
    private Pattern pattern = Pattern.compile("^\\/\\*-secure-\\W(.*)\\*\\/$"); 

    CustomGsonResponseBodyConverter(Gson gson, TypeAdapter<T> adapter) { 
     this.gson = gson; 
     this.adapter = adapter; 
    } 

    @Override 
    public T convert(ResponseBody value) throws IOException { 
     String response = value.string(); 
     System.out.println(response); 
     Matcher matcher = pattern.matcher(response); 

     JsonReader jsonReader = gson.newJsonReader(new StringReader(matcher.group(1))); 
     try { 
      return adapter.read(jsonReader); 
     } finally { 
      value.close(); 
     } 
    } 
} 
+0

答えを投稿してくれてありがとうございます。 – FrankR

+0

このコンバータを改造する方法を教えてください –

1
Gson gson = new GsonBuilder() 
    .setLenient() 
    .build(); 
// ... 
.addConverterFactory(GsonConverterFactory.create(gson) 

あなたはGsonConverter前に動作するコンバータを実装することができるかもしれないthis

+0

今すぐエラーメッセージが に変更されました。java.io.EOFException:2行目の入力行318のパス$ –

関連する問題