Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误-返回JSON以及HTTP状态代码错误JAX-RS_Java_Json_Jax Rs - Fatal编程技术网

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);