- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 android 应用程序中使用 Retrofit 和 Gson 有一段时间了,但是我从服务器获得的 ID
是 13 位数字。 Gson 自动将这些数字转换为科学计数法,然后将其转换为 String/Long
,无论我指定什么。
ID
public class User implements Serializable {
@SerializedName("accessToken")
@Expose
public String accessToken;
@SerializedName("userId")
@Expose
public String userId; //This is where it casts it into a Scientific notation
@SerializedName("userRole")
@Expose
public int userRole;
@SerializedName("name")
@Expose
public String name;
@SerializedName("mobile")
@Expose
public String mobile;
@SerializedName("countryId")
@Expose
public String countryId; //Here too
@SerializedName("email")
@Expose
public String email;
@SerializedName("username")
@Expose
public String username;
}
由于某些原因这不起作用
How to prevent Gson from converting a long number (a json string ) to scientific notation format?
当我检查调试器时,我的控制流从未进入 serialize(Double src, Type typeOfSrc, JsonSerializationContext context)
@Override
public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
if(src == src.longValue())
return new JsonPrimitive(src.longValue());
return new JsonPrimitive(src);
}
我尝试过的另一种解决方案
这是我当前的 RetrofitBuilder 方法
Retrofit.Builder rBuilder = new Builder();
rBuilder.baseUrl(API_URL);
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Double.class, new JsonSerializer<Double>() {
@Override
public JsonElement serialize(final Double src, final Type typeOfSrc, final JsonSerializationContext context) {
BigDecimal value = BigDecimal.valueOf(src);
return new JsonPrimitive(value);
}
});
gsonBuilder.registerTypeAdapter(Long.class, new JsonSerializer<Long>() {
@Override
public JsonElement serialize(final Long src, final Type typeOfSrc, final JsonSerializationContext context) {
BigDecimal value = BigDecimal.valueOf(src);
return new JsonPrimitive(value);
}
});
rBuilder.addConverterFactory(GsonConverterFactory.create(gsonBuilder.create()));
我们将不胜感激任何形式的帮助。
最佳答案
以防万一有人遇到同样的问题,
我为响应使用了包装类,指定的数据类型是对象
。为此,Gson 无论如何都试图将其转换为科学记数法。
我实际上必须使用来自 Gson 的 JsonElement
public class GenericResponse_ implements Serializable {
@SerializedName("status")
@Expose
public int status;
@SerializedName("error")
@Expose
public String error;
@SerializedName("data")
@Expose
public JsonElement data; //This was of type Object, changed to JsonElement
}
关于java - Retrofit & Gson - 防止 gson 将 Long 转换为科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52903294/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!