Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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对象的JSON列表_Java_Json_Spring Boot_Jackson_Json Schema Validator - Fatal编程技术网

Java 创建JSON对象的JSON列表

Java 创建JSON对象的JSON列表,java,json,spring-boot,jackson,json-schema-validator,Java,Json,Spring Boot,Jackson,Json Schema Validator,我在springboot中构建了一个REST服务,它接受JSON被POSTed发送到端点。我正在使用JSON模式验证器JSON模式验证POSTed。当存在验证错误时,我会在JSON中收到错误消息。我想在JSON中将错误消息发送回客户端。我遇到的问题是,我在自己的JSON对象中获取每个错误消息。这不是问题,因为只有一条错误消息,但如果有多条错误,我希望只有一条包含所有错误消息的JSON消息。目前,我在一个ProcessingReport对象中得到错误消息。在ProcessingReport上迭代,

我在springboot中构建了一个REST服务,它接受
JSON
POST
ed发送到端点。我正在使用
JSON模式验证器
JSON模式验证
POST
ed。当存在验证错误时,我会在
JSON
中收到错误消息。我想在
JSON
中将错误消息发送回客户端。我遇到的问题是,我在自己的
JSON
对象中获取每个错误消息。这不是问题,因为只有一条错误消息,但如果有多条错误,我希望只有一条包含所有错误消息的
JSON
消息。目前,我在一个
ProcessingReport
对象中得到错误消息。在
ProcessingReport
上迭代,我能够得到每个
ProcessingMessage
,我可以将其转换为
JSON

for(ProcessingMessage message : report ) {
                  message.asJson();
            }
每个错误消息如下所示:

{
    "level": "error",
    "schema": {
      "loadingURI": "#",
      "pointer": "/properties/parameterDateAdjusted"
    },
    "instance": {
      "pointer": "/parameterDateAdjusted"
    },
    "domain": "validation",
    "keyword": "format",
    "attribute": "date-time",
    "message": "string \"2017-02-29T23:59:00Z\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z]",
    "value": "2017-02-29T23:59:00Z",
    "expected": [
      "yyyy-MM-dd'T'HH:mm:ssZ",
      "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z"
    ]
  }
{
  "error": 1,
  "message": {
    "level": "error",
    "schema": {
      "loadingURI": "#",
      "pointer": "/properties/parameterDateAdjusted"
    },
    "instance": {
      "pointer": "/parameterDateAdjusted"
    },
    "domain": "validation",
    "keyword": "format",
    "attribute": "date-time",
    "message": "string \"2017-02-29T23:59:00Z\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z]",
    "value": "2017-02-29T23:59:00Z",
    "expected": [
      "yyyy-MM-dd'T'HH:mm:ssZ",
      "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z"
    ]
  },
  "error": 2,
  "message": {
    "level": "error",
    "schema": {
      "loadingURI": "#",
      "pointer": "/properties/parameterDateUnadjusted"
    },
    "instance": {
      "pointer": "/parameterDateUnadjusted"
    },
    "domain": "validation",
    "keyword": "format",
    "attribute": "date-time",
    "message": "string \"2010-11-31T00:00:00Z\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z]",
    "value": "2010-11-31T00:00:00Z",
    "expected": [
      "yyyy-MM-dd'T'HH:mm:ssZ",
      "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z"
    ]
  }
}
我希望有多条类似以下内容的错误消息:

{
    "level": "error",
    "schema": {
      "loadingURI": "#",
      "pointer": "/properties/parameterDateAdjusted"
    },
    "instance": {
      "pointer": "/parameterDateAdjusted"
    },
    "domain": "validation",
    "keyword": "format",
    "attribute": "date-time",
    "message": "string \"2017-02-29T23:59:00Z\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z]",
    "value": "2017-02-29T23:59:00Z",
    "expected": [
      "yyyy-MM-dd'T'HH:mm:ssZ",
      "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z"
    ]
  }
{
  "error": 1,
  "message": {
    "level": "error",
    "schema": {
      "loadingURI": "#",
      "pointer": "/properties/parameterDateAdjusted"
    },
    "instance": {
      "pointer": "/parameterDateAdjusted"
    },
    "domain": "validation",
    "keyword": "format",
    "attribute": "date-time",
    "message": "string \"2017-02-29T23:59:00Z\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z]",
    "value": "2017-02-29T23:59:00Z",
    "expected": [
      "yyyy-MM-dd'T'HH:mm:ssZ",
      "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z"
    ]
  },
  "error": 2,
  "message": {
    "level": "error",
    "schema": {
      "loadingURI": "#",
      "pointer": "/properties/parameterDateUnadjusted"
    },
    "instance": {
      "pointer": "/parameterDateUnadjusted"
    },
    "domain": "validation",
    "keyword": "format",
    "attribute": "date-time",
    "message": "string \"2010-11-31T00:00:00Z\" is invalid against requested date format(s) [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z]",
    "value": "2010-11-31T00:00:00Z",
    "expected": [
      "yyyy-MM-dd'T'HH:mm:ssZ",
      "yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,12}Z"
    ]
  }
}

这样做的最佳方式是什么?我是否可以创建一个
JSON
对象的
List
,比如
List
,并将其转换为一个
Jsonnode
?或者是我连接
JSON
错误消息的某种方式?

只要返回一个对象列表,Spring就会将其映射到一个JSON数组

@RequestMapping(method = RequestMethod.GET)
public @ResponseBody
List<ErrorWrapper> getSomething() throws IOException {
    List<JsonNode> errorNodes = new ArrayList<>();
    errorNodes.add(new ObjectMapper().createObjectNode());
    errorNodes.add(new ObjectMapper().createObjectNode());

    return IntStream.range(0, errorNodes.size())
            .mapToObj(i -> new ErrorWrapper(i + 1, errorNodes.get(i)))
            .collect(Collectors.toList());
}
返回

[
    {
        "error": 1,
        "message": { }
    },
    {
        "error": 2,
        "message": { }
    }
]

我从Luciano的部分答案中得出以下结论:

List<JsonErrorMessage> jsonErrorMessages = new ArrayList<>();
            int i = 0;
            for (ProcessingMessage message : report) {
                i++;
                jsonErrorMessage.setErrorNumber(i);
                jsonErrorMessage.setMessage(message.asJson());
                jsonErrorMessages.add(jsonErrorMessage);
            }

            return (new ResponseEntity(jsonErrorMessages, headers, HttpStatus.BAD_REQUEST));
List jsonErrorMessages=new ArrayList();
int i=0;
用于(处理消息:报告){
i++;
jsonErrorMessage.setErrorNumber(i);
jsonErrorMessage.setMessage(message.asJson());
添加(jsonErrorMessage);
}
返回(新的响应属性(jsonErrorMessages、Header、HttpStatus.BAD_请求));

它创建了我想要的响应。不确定是否有我不知道的任何问题。

您是否已经尝试在方法中返回
List
,并查看发生了什么?我更希望获得
{“error”:1,“message”:{JSON_FROM_VALIDATION},“error”:2,“message”:{JSON_FROM_VALIDATION}
。我想我需要为错误1和错误2创建节点,然后添加来自验证的消息。@g3blv是的,如果这是您的目标,我会在每个错误节点周围创建一个POJO包装器或在节点上循环,并自己丰富它们。