代码之家  ›  专栏  ›  技术社区  ›  Jim Clermonts

如何在android中实现moshi不区分大小写的json注释

  •  2
  • Jim Clermonts  · 技术社区  · 7 年前

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

    public class GetConversationListResponseBody {
        @Keep
        @Json(name = "email")
        private String email;    
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Eric Cochran SpecialSnowflake    7 年前

    没有内置的通用方法来实现这一点。

    如果您在单个情况下需要这个,那么定制适配器就很简单了。

    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");
    }
    
        2
  •  0
  •   Fartab    6 年前

    以下是答案 Zac Sweers 关于这个 github issue 以下内容:

    json键区分大小写。email和email是两个不同的属性,应该这样对待,因为如果两者都存在于json blob中,就无法协调。如果moshi不区分大小写,这将是一个bug,因此它绝对不是我们要添加的“功能”。