【发布时间】:2014-02-12 17:07:29
【问题描述】:
我尝试在骆驼中使用restlet。请求应该是 JSON。但不知道如何将 JSON 转换为 java 对象。以下是代码示例:
客户端请求:
$.ajax({
url: '${pageContext.request.contextPath}/rs/search?restletMethod=POST',
type: "POST",
data: $('#searchRequest').serializeArray(),
contentType: "application/json;charset=utf-8",
dataType: "html",
success: function (result)
{
$("#result #queryId").text(result);
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError.Message);
}
});
RouterBuilder:
from("restlet:/search?restletMethod=POST").unmarshal("gson")
.to("bean:restletHandler");
camelcontext.xml
<bean id="gson" class="org.apache.camel.component.gson.GsonDataFormat">
<property name="unmarshalType" value="domain.SearchRequest"/>
</bean>
我不断收到以下异常:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期 BEGIN_OBJECT 但在第 1 行第 1 列是 STRING
Exchange 中的 Body 类型为 org.restlet.engine.io.UnclosableInputStream 看起来像:
sex=female&_sex=on&sex=male&_sex=on&_sex=on&_race=on&race=black&_race=on&race=indian&_race=on&_race=on&_race=on&gender=&medication=2345&_medication=on&_medication=on&_medication=on&_medication=on&_medication=on&_diagnosis=on&诊断=410.90&_diagnosis=on& on&_diagnosis=on&_diagnosis=on&description=sdfdsfQuery RequestcloseID描述请求创建日期所有者状态完成日期计数
body 中的流看起来不像 Json,所以 gson 不知道如何将其转换为对象。 任何帮助将不胜感激!
谢谢,
【问题讨论】: