当前位置: 首页 > 知识库问答 >
问题:

Java类型的消息体编写器,类net.sf.json。找不到JSONObject和MIME媒体类型application/json

高经艺
2023-03-14

我正在使用jersey客户端调用rest webservice。

我的网络服务正在使用json,所以我需要让json打电话给我的网络服务提供商。

我用下面的方法做这件事。

    JSONObject object=new JSONObject();
    object.put("name", employee.getName());
    object.put("empId", employee.getEmpId());
    object.put("organizationName", employee.getOrganizationName());


ClientResponse response = service.path("rest").path("vtn").path("addEmplyee")
            .type(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class, object);

但是我得到了以下异常:

09:52:01,625错误[[MVC-dispatcher]]servlet MVC-dispatcher的Servlet.service()抛出异常com . sun . jersey . API . client . client handler异常:在com . sun . jersey . client . URL connection . urlconnection的com . sun . jersey . API . client . request writer . writerequestentity(request writer . Java:288)中找不到Java类型类net . SF . JSON . JSON . JSON object和MIME媒体类型application/json的消息正文编写器

但是如果我把json转换成字符串表示,比如:

String input = "{\"name\" : \"" + employee.getName() + "\",\"empId\" : \"" + employee.getEmpId() + "\",\"organizationName\" : \"" + employee.getOrganizationName() + "\"}";

ClientResponse response = service.path("rest").path("vtn").path("addEmplyee")
            .type(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class, input);

那么它工作正常。

请建议如何在没有出现上述异常的情况下放置我的 JSON 对象。最好的方法是什么?

提前谢谢。

我得到了上面的解决方案。现在我正在使用jackson-mapper api将POJO转换为json。

下面是代码片段。

ObjectMapper mapper = new ObjectMapper();
ClientResponse response = resource.path("rest").path("vtn").path("addEmplyee")
        .type(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class, mapper.writeValueAsString(employee)); 

共有3个答案

楚良平
2023-03-14

添加一个. toString()对我有用:

JSONObject object=new JSONObject();
object.put("name", employee.getName());
object.put("empId", employee.getEmpId());
object.put("organizationName", employee.getOrganizationName());


ClientResponse response = service.path("rest").path("vtn").path("addEmplyee").type(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class,object.toString());
燕承安
2023-03-14

只是从上面的问题中复制解决方案,以防有人在寻找答案。

使用jackson-mapper api将POJO转换为json,如下面的代码片段所示:

ObjectMapper mapper = new ObjectMapper();
ClientResponse response = resource.path("rest").path("vtn").path("addEmplyee")
        .type(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class, mapper.writeValueAsString(employee)); 
闻人思聪
2023-03-14

更好的方法是告诉泽西客户端它可以使用杰克逊进行序列化:https://stackoverflow.com/a/2580315/516188

粘贴设置:

ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(JacksonJsonProvider.class);
Client clientWithJacksonSerializer = Client.create(cc);

JacksonJson提供者jackson-jaxrs-json-的包中。

 类似资料: