Java 错误-返回JSON以及HTTP状态代码错误JAX-RS
当Java 错误-返回JSON以及HTTP状态代码错误JAX-RS,java,json,jax-rs,Java,Json,Jax Rs,当dev为null时,从REST客户端触发POST时获取此错误。我无法获取JSON,因此引发此错误: 位置0处的意外字符(D)。设备标识符不能为null或空 其中,设备标识符中的D标记为红色,这意味着它不会将JSON作为响应返回 您的客户端希望获得JSON,但您在响应实体中设置了一个普通字符串,并将application/JSON设置为内容类型。您需要返回一个有效的JSON。比如说 @POST @Consumes({MediaType.APPLICATION_JSON}) @Produces({
dev
为null时,从REST客户端触发POST时获取此错误。我无法获取JSON,因此引发此错误:
位置0处的意外字符(D)。设备标识符不能为null或空
其中,设备标识符中的D标记为红色,这意味着它不会将JSON作为响应返回 您的客户端希望获得JSON,但您在响应实体中设置了一个普通字符串,并将
application/JSON
设置为内容类型。您需要返回一个有效的JSON。比如说
@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();
}
}
}
还可以使用首选映射器构建json响应字符串(需要添加依赖项)。这是一个使用Jackson的示例
使用API的Jackson
return Response
.status(Response.Status.BAD_REQUEST)
.entity("{\"error\":\"Device cannot be null or empty.\"}")
.build();
杰克逊使用POJO
ObjectMapper mapper = new ObjectMapper();
ObjectNode objectNode = mapper.createObjectNode();
objectNode.put("error", "Device cannot be null or empty.");
String json = mapper.writeValueAsString(objectNode);
您还可以从服务方法返回POJO,并让JAX-RS实现将它们转换为JSON(这意味着更改响应类型)。请参阅我无法获取JSON。当dev为null时会引发此错误。请澄清您的问题,当dev从REST客户端以null形式发送时。它将以HTTP错误请求错误的形式抛出该错误。但我得到的响应消息是:位置0处出现意外字符(D)。设备标识符不能为null或空。其中,设备标识符中的D标记为红色,这意味着它没有将JSON作为response.Worked!返回!。谢谢。用双引号转义看起来不太合适。有没有其他方法来编写接受JSON对象的包装器。您可以使用映射程序库来构建JSON字符串:Jackson、Gson、抛弃。。。请参见更新答案中的示例。
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);