一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - gson ajax 數(shù)字精度丟失問題的解決方法

gson ajax 數(shù)字精度丟失問題的解決方法

2020-08-24 10:40jingxian Java教程

下面小編就為大家?guī)硪黄猤son ajax 數(shù)字精度丟失問題的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

ajax傳輸?shù)膉son,gson會發(fā)生丟失,long > 15的時候會丟失0

解決方案:直接把屬性為long的屬性自動加上雙引號成為js的字符串,這樣就不會發(fā)生丟失了,ajax自動識別為字符串。

用法:

ajaxResult("",0,new Object()); //隨便一個對象就可以,List 之類的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
   * 以Ajax方式輸出常規(guī)操作結果
   *
   * @param status
   *      返回狀態(tài),200表示成功, 500表示錯誤
   * @param message
   *      操作結果描述
   * @param tag
   *      附加數(shù)據(jù)
   * @return
   */
  protected ActionResult ajaxResult(int status, final String message, Object tag) {
    JsonObject json = new JsonObject();
    json.addProperty("status", status);
    json.addProperty("message", message);
 
    String strJson = json.toString();
 
    if (tag != null) {
      StringBuffer sb = new StringBuffer();
      sb.append(strJson.substring(0, strJson.length() - 1));
      sb.append(",\"tag\":");
      sb.append(GsonUtils.toJsonWithGson(tag));
      sb.append("}");
      strJson = sb.toString();
    }
 
    return writeJson(strJson);
  }
 
/**
   * 向客戶端輸出文本信息
   *
   * @param message
   * @return
   */
  protected ActionResult write(final String message) {
    return new ActionResult() {
      @Override
      public void render(BeatContext arg0) throws Exception {
        beat.getResponse().setCharacterEncoding("UTF-8");
        beat.getResponse().setContentType("text/json;charset=UTF-8");
        PrintWriter out = beat.getResponse().getWriter();
        out.print(message);
        out.close();
      }
 
    };
  }
 
  /**
   * 向客戶端輸出文本信息
   *
   * @param message
   * @return
   */
  protected ActionResult writeText(final String message) {
    return new ActionResult() {
      @Override
      public void render(BeatContext arg0) throws Exception {
        beat.getResponse().setCharacterEncoding("UTF-8");
        beat.getResponse().setContentType("application/text");
        PrintWriter out = beat.getResponse().getWriter();
        out.print(message);
        out.close();
      }
 
    };
  }

GsonUtils.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package com.xxx.xxx.common.util.gson;
 
import com.google.gson.*;
 
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
public class GsonUtils {
  //private static Log logger = LogFactory.getLog(GsonUtils.class);
  public static String toJsonWithGson(Object obj) {
    Gson gson = createGson();  //new Gson();
    return gson.toJson(obj);
  }
 
  public static String toJsonWithGson(Object obj, Type type) {
    Gson gson = createGson();  //new Gson();
    return gson.toJson(obj, type);
  }
 
  @SuppressWarnings("unchecked")
  public static String toJsonWithGson(List list) {
    Gson gson = createGson();  //new Gson();
    return gson.toJson(list);
  }
 
  @SuppressWarnings("unchecked")
  public static String toJsonWithGson(List list, Type type) {
    Gson gson = createGson();  //new Gson();
    return gson.toJson(list, type);
  }
 
  public static String toJsonWithGsonBuilder(Object obj) {
    Gson gson = new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();
    return gson.toJson(obj);
  }
 
  public static String toJsonWithGsonBuilder(Object obj, Type type) {
    Gson gson = new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();
    return gson.toJson(obj, type);
  }
 
  @SuppressWarnings("unchecked")
  public static String toJsonWithGsonBuilder(List list) {
    Gson gson = new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();
    return gson.toJson(list);
  }
 
  @SuppressWarnings("unchecked")
  public static String toJsonWithGsonBuilder(List list, Type type) {
    Gson gson = new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();
    return gson.toJson(list, type);
  }
 
  public static <T> Object fromJson(String json, Class<T> clazz) {
    Object obj = null;
    try {
      Gson gson = new Gson();
      obj = gson.fromJson(json, clazz);
    } catch (Exception e) {
      //logger.error("fromJson方法轉換json串到實體類出錯", e);
    }
    return obj;
  }
 
  /**
   * 如果 Long 的數(shù)字超過15位,轉換為String,在json中數(shù)字兩邊有引號
   * @return
   */
  private static Gson createGson(){
    GsonBuilder gsonBuilder = new GsonBuilder();
    LongSerializer serializer = new LongSerializer();
    gsonBuilder.registerTypeAdapter(Long.class, serializer);
    gsonBuilder.registerTypeAdapter(long.class, serializer);
    Gson gson = gsonBuilder.create();
    return gson;
  }
 
  public static void main(String... args) throws Exception{
//    long a = 12345678901234578L;
//
//    GsonBuilder builder = new GsonBuilder();
//    builder.registerTypeAdapter(Long.class, new LongSerializer());
//    Gson gson2 = builder.create();
//    System.out.println(gson2.toJson(a));
//
//    Gson gson = new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();
//    String str = gson.toJson(a);
//    System.out.println(str);
 
    TestVO vo = new TestVO();
    vo.setId(618708732263538688L);
    vo.setId2(918708732263538688L);
    System.out.println(toJsonWithGson(vo));
 
  }
 
  static class LongSerializer implements JsonSerializer<Long> {
    public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
      if(src!=null){
        String strSrc = src.toString();
        if(strSrc.length()>15){
          return new JsonPrimitive(strSrc);
        }
      }
      return new JsonPrimitive(src);
    }
  }
 
  static class TestVO {
    public long getId() {
      return id;
    }
 
    public void setId(long id) {
      this.id = id;
    }
 
    private long id;
 
    public Long getId2() {
      return id2;
    }
 
    public void setId2(Long id2) {
      this.id2 = id2;
    }
 
    private Long id2;
  }
}

MyExclusionStrategy.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.xxx.xxx.common.util.gson;
 
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
 
public class MyExclusionStrategy implements ExclusionStrategy {
 
  private final Class<?> typeToSkip;
   
  public MyExclusionStrategy(){
    this.typeToSkip=null;
  }
   
  public MyExclusionStrategy(Class<?> typeToSkip) {
    this.typeToSkip = typeToSkip;
  }
   
  public boolean shouldSkipClass(Class<?> clazz) {
    return (clazz == typeToSkip);
  }
 
  public boolean shouldSkipField(FieldAttributes f) {
    return f.getAnnotation(NotSerialize.class) != null;
  }
 
}

NotSerialize

?
1
2
3
4
5
6
7
8
9
10
11
package com.xxx.xxx.common.util.gson;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface NotSerialize {
}

以上這篇gson ajax 數(shù)字精度丟失問題的解決方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美成人免费观看的 | 国产精品一区二区三区免费 | 免费看60分钟大片视频播放 | 久久99热成人精品国产 | 国产一区私人高清影院 | 久久国产精品免费网站 | 亚洲sss综合天堂久久久 | 日本中文字幕二区三区 | 久久视频这里只精品99热在线观看 | 国模丰满美女冰漪34d | 欧美区在线 | 精品久久久久久影院免费 | julia ann全部在线hd | 日本三级香港三级久久99 | 1024亚洲天堂 | www91在线观看| 乌克兰少妇大胆大BBW | 国产精品久久久精品日日 | 久久亚洲成a人片 | 激情影院网站 | 亚洲男人天堂影院 | 欧美图片另类小说综合 | 半挠脚心半黄的网站 | 日韩中文字幕一区 | 国产良家 | 亚洲第一区在线观看 | 幻女free性俄罗斯第一次摘花 | 射逼网| 国产精品亚洲专区在线播放 | 三级网站午夜三级 | 91精品国产美女福到在线不卡 | 亚洲va久久久久综合 | 四虎comwww最新地址 | 色综合天天综合网站中国 | 欧美一区二区三区在线观看不卡 | 日本一区二区三区国产 | 男人的天堂久久精品激情a 男人的天堂va | 91精品大神国产在线播放 | 91香蕉在线 | 动漫美女强行被吸乳做羞羞事 | 成人黄色a级片 |