json の形式で appfuse User インスタンスを返す Web サービスを持つ。このユーザー モデルには、ロール オブジェクトのセットであるプロパティ ロールが含まれます。私の問題は、このロール プロパティにロール オブジェクトが含まれていない場合、または複数のロール オブジェクトが含まれている場合は正常に機能しますが、単一のロール要素が含まれている場合は機能しないことです。
例外::
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 218
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:180)
at com.google.gson.Gson.fromJson(Gson.java:755)
at com.google.gson.Gson.fromJson(Gson.java:721)
at com.google.gson.Gson.fromJson(Gson.java:670)
at com.google.gson.Gson.fromJson(Gson.java:642)
at com.steriamobile.ws.smfserver.service.SMFUserServiceImpl.getUser(SMFUserServiceImpl.java:44)
at com.steriamobile.ws.smfserver.service.SMFUserManagerImpl.getUser(SMFUserManagerImpl.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy32.getUser(Unknown Source)
休憩サービス::
@GET
@Path("/getUser/{id}")
public User get(@PathParam("id") Long id) {
return userManager.get(id);
}
コードのデシリアライズ:
Gson gson = new Gson();
User user = gson.fromJson(json,new TypeToken<User>() {}.getType());