在尝试发送jsonObject

时间:2017-08-18 21:58:38

标签: java json rest post jersey

嘿所以我正在尝试将一些json-object发送到其他Web服务,然后获取某些特定键的值,然后处理数据以最终返回一个新的json-object,它将在另一个中使用地点。无论如何,当我尝试与服务通信时,我正在获取HTTP 204。

我的休息服务看起来像这样

@Path("/example")
public class PdfMaker { 

@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response PruebasMet(JSONObject json) throws IOException, JSONException{
        try{
            String xml = json.getString("xml");
            String plantilla = json.getString("plant");

        //method that uses "xml" and "plant" and returns "pdf" 

        JSONObject response = new JSONObject();
        response.put("pdf", pdf);

    return Response.status(200).entity(pdfb64.toString()).build();
        }catch(Exception e){
            e.getStackTrace();
            return null;
        }

}

我试图与此沟通

public class Jersey {

public static String baseuri = "http://localhost:8080/PdfMakerGF/rest/example/post";

public static void main(String[] args) {

    try {
        ClientConfig config = new DefaultClientConfig();
        Client client = Client.create(config);
        WebResource webResource = client.resource(baseuri);
        JSONObject objTest = new JSONobject();
        objTest.put("xml","Data1");
        objTest.put("plan", "Data2");


        ClientResponse res = webResource.header("Content-Type","application/json;charset=UTF-8")
       .post(ClientResponse.class, objTest.toString());

        System.out.println("output..." + "\n");

        System.out.println("Answer "+res);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

但我收到的回复就是这个

  

回答POST http://localhost:8080/PdfMakerGF/rest/example/post   返回的响应状态为204 No Content

显然有些不对劲但看不出它是什么。 因为我坚持这个。任何形式的帮助将不胜感激。 我正在使用netbeans 8.1,Glassfish 4.1和Jersey。 感谢

3 个答案:

答案 0 :(得分:0)

如果您的服务器遇到异常并转到catch块,则返回null,对应于HTTP 204(No Content)。正如sisyphus评论的那样,服务器标准输出应该有一些例外。

所以你可能需要:

  • 返回不同的响应代码(例如INTERNAL_SERVER_ERROR或 BAD_REQUEST)在catch块中
  • 检查服务器代码抛出的原因 例外

答案 1 :(得分:0)

很可能你会得到一个例外。我想这是因为你有"植物"在一个地方和"计划"在另一个。

答案 2 :(得分:0)

okey所以最终我需要改变的是服务恢复数据的方式,在我的情况下使用内部类,最终像这样工作..

Class Aux{
String xml;
String plant;
//generate gettes and setters :)
}
@Path("/example")
public class PdfMaker { 
@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response PruebasMet(Aux json) throws IOException, 
JSONException{
    try{
    String xml = json.getXml();
    String plant = json.getPlant();
    //method that uses "xml" and "plant" and returns "pdf" 

    JSONObject response = new JSONObject();
    response.put("pdf", pdf);

return Response.status(200).entity(pdf)).build();
    }catch(Exception e){
        e.getStackTrace();
        return null;
    }

}

,客户是......

Client client = new Client();
    WebResource wresource = client.resource("http://localhost:8080/PdfMakerGF/rest/example/post");
    JSONObject json = new JSONObject();
    json.put("xml", DATA);
    json.put("plant", DATA);

        ClientResponse response =  
        wresource.type("application/json").post(ClientResponse.class, 
        json.toString());

        out = response.getEntity(String.class);
        System.out.println("RES = "+response);
        System.out.println("OUT = "+out);

out有服务提供的信息