在進行項目遷移時,在原服務器中進行數據上傳時沒問題,遷移到新服務器時卻報如下異常:
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.google.gson.JsonSyntaxException: 2019-07-02 10:30:25
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
root cause
com.google.gson.JsonSyntaxException: 2019-07-02 10:30:25
com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:81)
com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:66)
com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:41)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
com.google.gson.Gson.fromJson(Gson.java:810)
com.google.gson.Gson.fromJson(Gson.java:775)
com.google.gson.Gson.fromJson(Gson.java:724)
com.google.gson.Gson.fromJson(Gson.java:696)
實體類中對應屬性爲java.util.Date類型,項目中的原碼爲:
Gson gson=new Gson();
String reqJson=request.getParameter("json");
Modal bean=gson.fromJson(reqJson, Modal.class);
運行到gson解析JSON時報如上異常,代碼沒變,爲什麼在不同服務器上運行的結果就不一樣了呢,後來各種搜索,才瞭解到Gson不同服務器在解析時間格式不一樣,瞭解到這一點後,只需要在Gson實例化指定解析的格式即可,將
Gson gson=new Gson();替換爲 Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
重新運行,終於通過了。