No message body writer has been found for class com.alibaba.fastjson.JSONObject, ContentType: */*

1:当使用 cxf 发布服务时,要求返回值类型为xml,或者json等

    @Path("/searchProductByText")
    @GET
    @Produces({"application/xml", "application/json"})
    JSONObject productSearch(@QueryParam("text") String text);

但是 cxf不支持解析  JSONObject 等对象

进行访问时将会返回    No message body writer has been found for class com.alibaba.fastjson.JSONObject, ContentType: */*

2:解决方法,定义一个pojo,里面包含 JSONObject  引用。将返回的JSONObject包含在 自定义的 POJO中,使用注解将pojo定义为能被解析为xml形式等。

    

package com.search.pojo;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonInclude;

import javax.xml.bind.annotation.XmlRootElement;

//@JsonInclude(JsonInclude.Include.NON_NULL)//不包含有null值的字段,即字段值为null的转换为json字符串时会被省略
@XmlRootElement(name="MyJSONObject")
public class MyJSONObject {
    JSONObject jsonObject;

    public JSONObject getJsonObject() {
        return jsonObject;
    }

    public void setJsonObject(JSONObject jsonObject) {
        this.jsonObject = jsonObject;
    }
}

3:在实现类中,返回对象变为 pojo

     

       MyJSONObject myJSONObject=new MyJSONObject();
        myJSONObject.setJsonObject(jsonObject);
        return myJSONObject;

4:接口 方法 返回 也变为 pojo

    

    @Path("/searchProductByText")
    @GET
    @Produces({"application/xml", "application/json"})
    MyJSONObject productSearch(@QueryParam("text") String text);

5  可以返回值了。

 6:前端接到响应体中的xml,可以转化为json

  

            httpResponse = httpUtil.HttpGet(requestParamMap, url);
            HttpEntity entity = httpResponse.getEntity();
            String s = EntityUtils.toString(entity);
            //将返回的xml字符串形式转化为json格式
            org.json.JSONObject xmlJSONObj = XML.toJSONObject(s);
            jsonObject = (JSONObject) JSON.parse(xmlJSONObj.toString());

 

posted @ 2018-03-15 16:32  1367356  阅读(1861)  评论(0编辑  收藏  举报