Java 创建JSON对象的JSON列表
我在springboot中构建了一个REST服务,它接受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上迭代,
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包装器或在节点上循环,并自己丰富它们。