2013-12-20 1 views
2

json 데이터 유효성 검사에 json-schema 유효성 검사기를 사용하고 있습니다. 오류가 발생하면 보고서가 생성됩니다. 그러나 사용자에게 오류를 보여주고 싶습니다. 보고서가 너무 커서 오류 메시지 만 표시하려고합니다. json-schema 유효성 검사기의 처리 보고서에서 모든 메시지를 추출하는 방법

내 보고서 -------------

com.github.fge.jsonschema.report

---------- 보고서입니다. ListProcessingReport : 실패

--- BEGIN 메시지는 ---

오류 : 인스턴스 중 적어도 하나의 필수 스키마와 일치하는 데 실패 4

level: "error" 
schema: {"loadingURI":"#","pointer":"/properties/question-groups/items"} 
instance: {"pointer":"/question-groups/0"} 
domain: "validation" 
keyword: "anyOf" 
nrSchemas: 4 
reports: {"/properties/question-groups/items/anyOf/0":[{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/multiple-choice/properties/evaluation-key/properties/options/items"},"instance":{"pointer":"/question-groups/0/evaluation-key/options/0"},"domain":"validation","keyword":"allOf","message":"instance failed to match all required schemas (matched only 0 out of 1)","matched":0,"nrSchemas":1,"reports":{"/definitions/multiple-choice/properties/evaluation-key/properties/options/items/allOf/0":[{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/multiple-choice/properties/evaluation-key/properties/options/items/allOf/0/properties/score"},"instance":{"pointer":"/question-groups/0/evaluation-key/options/0/score"},"domain":"validation","keyword":"type","message":"instance type (string) does not match any allowed primitive type (allowed: [\"integer\"])","found":"string","expected":["integer"]}]}}],"/properties/question-groups/items/anyOf/1":[{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/text/properties/evaluation-key"},"instance":{"pointer":"/question-groups/0/evaluation-key"},"domain":"validation","keyword":"additionalProperties","message":"object instance has properties which are not allowed by the schema: [\"options\"]","unwanted":["options"]},{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/text/properties/evaluation-key"},"instance":{"pointer":"/question-groups/0/evaluation-key"},"domain":"validation","keyword":"required","message":"object has missing required properties ([\"scorers\"])","required":["scorers"],"missing":["scorers"]},{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/text/properties/type"},"instance":{"pointer":"/question-groups/0/type"},"domain":"validation","keyword":"enum","message":"instance value (\"multiple-choice\") not found in enum (possible values: [\"text\"])","value":"multiple-choice","enum":["text"]}],"/properties/question-groups/items/anyOf/2":[{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/numeric/properties/evaluation-key"},"instance":{"pointer":"/question-groups/0/evaluation-key"},"domain":"validation","keyword":"additionalProperties","message":"object instance has properties which are not allowed by the schema: [\"options\"]","unwanted":["options"]},{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/numeric/properties/evaluation-key"},"instance":{"pointer":"/question-groups/0/evaluation-key"},"domain":"validation","keyword":"required","message":"object has missing required properties ([\"scorers\"])","required":["scorers"],"missing":["scorers"]},{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/numeric/properties/type"},"instance":{"pointer":"/question-groups/0/type"},"domain":"validation","keyword":"enum","message":"instance value (\"multiple-choice\") not found in enum (possible values: [\"numeric\"])","value":"multiple-choice","enum":["numeric"]}],"/properties/question-groups/items/anyOf/3":[{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/table"},"instance":{"pointer":"/question-groups/0"},"domain":"validation","keyword":"anyOf","message":"instance failed to match at least one required schema among 2","nrSchemas":2,"reports":{"/definitions/table/anyOf/0":[{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/table/anyOf/0"},"instance":{"pointer":"/question-groups/0"},"domain":"validation","keyword":"required","message":"object has missing required properties ([\"cells\"])","required":["cells","evaluation-key","group-id","question-text","type"],"missing":["cells"]}],"/definitions/table/anyOf/1":[{"level":"error","schema":{"loadingURI":"#","pointer":"/definitions/table/anyOf/1"},"instance":{"pointer":"/question-groups/0"},"domain":"validation","keyword":"required","message":"object has missing required properties ([\"cells\",\"matching-unit\"])","required":["cells","evaluation-key","group-id","matching-unit","question-text","type"],"missing":["cells","matching-unit"]}]}}]} 

--- 최종 메시지 ---

오류 메시지 만 표시되는 방법은 어떤 것이 든 도움이 될 것입니다.

당신은 JsonNode로 보고서를 읽고 지금까지 당신이에서 필요한 매개 변수 것을 얻을 수 있습니다 당신에게

소무

답변

2

감사드립니다.

ProcessingReport report; 
ProcessingMessage message; 

report = schema.validate(jsonData); 
Iterator itr = report.iterator(); 

while(itr.hasNext()) 
{ 
    message = (ProcessingMessage) itr.next(); 
     System.out.println("Message" + message.asJson().get("message").asText()); 
System.out.println("Reports" + message.asJson().get("reports").asText()); 

} 
-1

는 다음과 같은 방법

String getErrorsList(ProcessingReport report, boolean onlyErrors) { 
    StringBuilder jsonValidationErrors = new StringBuilder(); 
    for (ProcessingMessage processingMessage : report) { 
     if(onlyErrors && LogLevel.ERROR.equals(processingMessage.getLogLevel())) { 
      jsonValidationErrors.append(processingMessage.getMessage()).append("\n\r"); 
     } else if(!onlyErrors) { 
      jsonValidationErrors.append(processingMessage.getMessage()).append("\n\r"); 
     } 
    } 
    return jsonValidationErrors.toString(); 
} 
+0

이는 당신에게 오류를 지역화하고, 영업 이익은 요구하지 무엇에 도움이되지 않습니다 오류 메시지의 첫 번째 수준을 얻는다을 사용할 수 있습니다. – cbley