/ /春のブート残りのコントローラ1つのリクエストにマップされたPOSTの複数のデータ型url - java、spring、rest、jackson、spring-boot

スプリングブートレストコントローラ1つのリクエストにマップされたPOSTの複数のデータ型url - java、spring、rest、jackson、spring-boot

単一のオブジェクトまたは同じタイプのオブジェクトのリストのいずれかを受け入れることができるエンドポイントをセットアップしようとしています。

私は2つのデータ型で宣言された2つのメソッドを持つことを試みましたが、Springはそうではありません(サーバーを起動できません)

@RequestMapping(
value = "",
method = RequestMethod.POST ,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> single(@RequestBody Something something){
return ResponseEntity.ok("ok");
}

@RequestMapping(
value = "",
method = RequestMethod.POST ,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> multiple(@RequestBody List<Something> somethingList){
return ResponseEntity.ok("ok");
}

私が得た最も近いものは、何かを受け入れ、ある方法を宣言していることです。

@RequestMapping(
value = "",
method = RequestMethod.POST ,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> somethingArray(@RequestBody Something... something){
return ResponseEntity.ok("ok");
}

質問: Objectをただ受け入れる必要がなく、手動でデシリアライズを行う必要がなくても、これを行う方法はありますか?

編集:私はまた、複数の@RequestBody "sを試した

@RequestMapping(
value = "",
method = RequestMethod.POST ,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> somethingArray(@RequestBody(required = false) Something something, @RequestBody(required = false) Something[] somethingArray){
return ResponseEntity.ok("ok");
}

回答:

回答№1は0

1つのメソッドを作成し、例えば文字列。次に、Stringを分析してObjectにマーシャリングし、結果の型に応じてプライベートメソッドを呼び出す必要があります。 しかし、私は間違ったアプローチを意味する。さまざまなパラメータに対して異なるエンドポイントを定義する方が効果的です。


回答№2の場合は0

私は通常これを行うときに複数のエンドポイントを作成します。

顧客を追加する場合、エンドポイントは/顧客であり、リストであれば/顧客です。

私の知る限りでは、要求メソッドをパラメータ型でオーバーロードすることはできません。