【发布时间】:2018-10-16 11:17:44
【问题描述】:
有时我的后端返回电子邮件,有时它返回电子邮件。我希望第一个字符不区分大小写。这可能吗?
public class GetConversationListResponseBody {
@Keep
@Json(name = "email")
private String email;
}
【问题讨论】:
有时我的后端返回电子邮件,有时它返回电子邮件。我希望第一个字符不区分大小写。这可能吗?
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");
}
【讨论】:
这是Zac Sweers对此github issue的回答:
JSON 键区分大小写。 email 和 Email 是两个不同的属性,应该这样对待,因为如果两者都存在于 JSON blob 中,则无法协调。如果 Moshi 不区分大小写,这将是一个错误,所以它绝对不是我们要添加的“功能”。
【讨论】: