返回415不支持的媒体类型REST客户端的响应状态

时间:2015-09-05 05:25:23

标签: java rest

我想向REST webservice发出POST请求,我想通过POST请求传递客户java对象。但响应显示415错误代码不支持的媒体类型。
我的REST客户端

Client client = Client.create();
WebResource resource = client.resource("http://localhost:8080/cthix/rest/v1/m2");

Customer cust = new Customer();
cust.setId(101L);
ObjectMapper mapper = new ObjectMapper();
String jsonCustomer = mapper.writeValueAsString(cust);

ClientResponse restResponse = resource.accept("application/json").
                  post(ClientResponse.class,jsonCustomer);

                    System.out.println(restResponse.getStatus());
                    if(restResponse.getStatus()==200){
                        String output = restResponse.getEntity(String.class);
                        PrintWriter pw = response.getWriter();
                        pw.print(output);

                        pw.flush();
                        pw.close();
                    }

我的REST服务:

@Path(value = "/v1")
public class V1_status {
    @Path("/m2")
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Customer returnCustomerDetails(Customer customer){
        Set<Integer> phones = new HashSet<Integer>();
        phones.add(123424541);
        phones.add(123432123);

        List hobbies= new ArrayList();
        hobbies.add("Swimming");
        hobbies.add("coding");;

        customer.setHobbies(hobbies);
        customer.setPhones(phones);
        customer.setCity("Noida");
        customer.setName("abhishek");
        return customer;
    }
}

请指导如何修复它。

2 个答案:

答案 0 :(得分:2)

我确实遇到了问题,我错过的是: resource.type(“application / json”)

ClientResponse restResponse = resource.accept("application/json").type("application/json").post(ClientResponse.class,cust);

需要注意的两点:
1)无需手动将Customer对象转换为Json(如果你转换也没有问题)

2)无需使用@Consumes(MediaType.APPLICATION_JSON)如果你甚至使用它,没问题。这只说明,这个方法会接受这个MediaType。如果你不使用@Consumes注释,REST服务方法将尝试使用它来的任何格式,并将尝试将来自客户端的数据解析为其适当的Model对象(在参数中)。如果成功解析没问题。如果数据格式不合适,无法与Model对象同步。它会抛出异常。就是这样。

答案 1 :(得分:1)

问题在于您告诉服务使用JSON,参数customer是Customer类型,而在REST客户端中您发送的是字符串。

你需要

  1. 删除&#34; @Consumes(MediaType.APPLICATION_JSON)&#34;来自您的休息服务
  2. 在客户端:发送客户对象(而不是其json表示)