2017-06-10 9 views
0

私は、JSONがエンドポイントにPOSTであることを受け入れるSpringブートでRESTサービスを構築しました。私はPOSTJSONスキームに対してjson-schema-validatorを使用して検証しています。検証エラーが発生した場合、JSONにエラーメッセージが表示されます。 JSONにエラーメッセージをクライアントに送り返します。私が持っている問題は、自分自身のJSONオブジェクトにそれぞれのエラーメッセージが表示されることです。これは問題ではありませんが、1つのエラーメッセージがありますが、複数のエラーがある場合、すべてのエラーメッセージを持つJSONメッセージが1つしかありません。現在、ProcessingReportオブジェクトにエラーメッセージが表示されます。 ProcessingReportを反復するをそれぞれJSONに変換することができます。JSONオブジェクトの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" 
    ] 
    } 
} 

何? List<Jsonnode>のようなJSONオブジェクトのListを作成し、それをJsonnodeに変換できますか?または、エラーメッセージJSONを連結することができますか?

+0

あなたのメソッドに既に 'List 'を返そうとしましたか? –

答えて

0

オブジェクトのリストを返すだけで、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()); 
} 

そして

public class ErrorWrapper { 
    private int error; 
    private JsonNode message; 

    public ErrorWrapper(int error, JsonNode message) { 
     this.error = error; 
     this.message = message; 
    } 

    public int getError() { 
     return error; 
    } 

    public JsonNode getMessage() { 
     return message; 
    } 
} 

戻り

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

私は '{"エラー ":1、"メッセージ ":{JSON_FROM_VALIDATION}、"エラー ":2、"メッセージ ":{JSON_FROM_VALIDATION}}'を取得したいと考えています。私はエラー1とエラー2のノードを作成し、検証からメッセージを追加する必要があると思います。 – g3blv

+0

@ g3blvええ、それがあなたの目標なら、私は各エラーノードの周りにPOJOラッパーを作成するか、ノードの上にループし、あなた自身を豊かにするでしょう。 –

+0

@ g3blv更新された回答を見る –

0

私はルチアーノの回答の一部を取り、これを思い付いた:

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

それは私が欲しいの応答を作成します。私が気づいていない問題があるかどうかはわかりません。

関連する問題