__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作为响应返回。
答案 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/