【问题标题】:camel restlet Json integration issue骆驼restlet Json集成问题
【发布时间】: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 不知道如何将其转换为对象。 任何帮助将不胜感激!

谢谢,

【问题讨论】:

    标签: java json restlet


    【解决方案1】:

    使用 JSON.parse() 并且 content-type 必须设置为 application/json

    【讨论】:

    • 感谢您的回复!当我将数据传递为:{"demographics.sex":["female","male","unknown"],"demographics.race":"indian","medications.includeCodes":["2345"," 4567"],"medications.excludeCodes":"4567","diagnosis.includeCodes":["250.00","410.90","401.9"],"description":"cxzcxzc","gender":""}在“gson”之后创建的对象缺少字符串数组:
    猜你喜欢
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多