有时我的后端返回电子邮件,有时返回电子邮件。我希望第一个字符不区分大小写。这可能吗?

public class GetConversationListResponseBody {
    @Keep
    @Json(name = "email")
    private String email;
}

最佳答案

没有内置的通用方法可以做到这一点。

如果您只需要这种情况,则自定义适配器是微不足道的。

public static final class GetConversationListResponseBody {
  public final String email;

  GetConversationListResponseBody(String email) {
    this.email = email;
  }
}

static final class InternalGetConversationListResponseBody {
  String email;
  String EMAIL;

  static final Object ADAPTER = new Object() {
    @FromJson GetConversationListResponseBody fromJson(
        InternalGetConversationListResponseBody json) {
      String email = json.email != null ? json.email : json.EMAIL;
      return new GetConversationListResponseBody(email);
    }
  };
}

@Test public void getConversationListResponseBody() throws IOException {
  Moshi moshi = new Moshi.Builder()
      .add(InternalGetConversationListResponseBody.ADAPTER)
      .build();
  JsonAdapter<GetConversationListResponseBody> adapter = moshi.adapter(GetConversationListResponseBody.class);
  assertThat(adapter.fromJson("{\"email\":\"e@gmail.com\"}").email).isEqualTo("e@gmail.com");
  assertThat(adapter.fromJson("{\"EMAIL\":\"e@gmail.com\"}").email).isEqualTo("e@gmail.com");
}

10-07 19:32
查看更多