错误 - 返回JSON以及HTTP状态代码错误JAX-RS

时间:2017-02-17 10:31:14

标签: java json jax-rs

__declspec(dllimport)

@POST @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) @Path("/data/services") public Response DiscoverDevice(BlockDevsPost blockdevice) { for (DeviceIdentifier device : blockdevice.getDevice()) { String dev = device.Device(); System.out.println("DEVICE "+ dev); if (dev == null || dev.equals("")){ return Response.status(Response.Status.BAD_REQUEST).entity("Device cannot be null or empty.").build(); } } } 为空时,从REST客户端触发POST时出现此错误。我无法获得JSON并抛出此错误:

  

位置0处的意外字符(D)。设备标识符不能为空或空。

设备标识符中的D标记为红色,表示它没有将JSON作为响应返回。

1 个答案:

答案 0 :(得分:1)

您的客户端希望获得JSON,但您已在Response实体中设置了一个纯字符串,并在application/json中设置了内容类型。您需要返回有效的JSON。例如

return Response
           .status(Response.Status.BAD_REQUEST)
           .entity("{\"error\":\"Device cannot be null or empty.\"}")
           .build();

您还可以使用首选的映射器构建json响应字符串(您需要添加依赖项)。这是使用杰克逊的一个例子

Jackson使用API​​

ObjectMapper mapper  = new ObjectMapper();
ObjectNode objectNode = mapper.createObjectNode();
objectNode.put("error", "Device cannot be null or empty.");
String json = mapper.writeValueAsString(objectNode);

杰克逊使用POJO

class ErrorBean{
   private String error;
   //getters and setters
}

ObjectMapper mapper = new ObjectMapper();
ErrorBeanerrorBean = new ErrorBean();
errorBean.setError ("Device cannot be null or empty.");
String json = mapper.writeValueAsString(errorBean);

您还可以从服务方法返回POJO,并让JAX-RS实现将它们转换为JSON(这意味着更改响应类型)。见https://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/