2017-10-11 9 views
0

私はSpring BootでREST APIを書いています。私のエンドポイントの1つが、JSON要求本体を消費するPOSTリクエストを処理します。一方、別のパラメータがURLに提供されます。なぜ406はパス変数とリクエストボディの両方でポストリクエストを送信します

@RequestMapping(
      value = "/cycle?&visit={visitid}", 
      method = RequestMethod.POST, 
      consumes = "application/json", 
      produces = "text/plain") 
    @ResponseStatus(HttpStatus.CREATED) 
    public String persistCycleCount(@Valid @PathVariable Integer visitId, @Valid @RequestBody CycleCount cycleCount) 

エンティティCycleCountは次のようになります。 @Entity @Table(名前= "CYCLE_CNT_HIST")

public class CycleCount implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "CYCLE_CNT_ID") 
    private long id; 

    @NotNull 
    @Column(name = "DOOR_ID") 
    private String activeDoorId; 

    @Column(name = "VISIT_ID") 
    private long visitId; 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name = "SAMPLE_DTM") 
    private Date sampleDateTime; 

    @Column(name = "SAMPLE_TIMEZONE") 
    private int sampleTimeZone; 

    @NotNull 
    @Column(name = "SYS_CYCLE_CNT") 
    private int systemCycleCount; 

    @NotNull 
    @Column(name = "CTRLR_CYCLE_CNT") 
    private int controllerCycleCount; 

テストは/cycle?&visit=1にJSONを以下にリクエストを送信することにより、APIが、私は406を得ましたここで

{ 
    "activeDoorId": "d002", 
    "controllerCycleCount": 15000, 
    "systemCycleCount": 78000 
} 

は、要求の闊歩出力です: enter image description here ハンドラメソッドの最初の行にブレークポイントを設定してデバッグしようとすると、要求を送信した後でもその行にヒットしませんでした。 私はこれに似た他のエンドポイントを持っています。このエンドポイントはURLに変数を必要とせず、すべて機能します。なぜ私は406を手に入れますか?

答えて

0

1 - たぶん、あなたはあなたのアプローチを変えることができる、あなたは

2 - PathVariableないRequestParameterを使用するためにあなたが検証データについてBindingResultを置くことができ、そしてあなたの要求にエラーがある場合は、表示することができRequestBodyを検証することができます。

@RequestMapping(value = "/cycle", 
    method = RequestMethod.POST, 
    consumes = "application/json", 
    produces = "text/plain", 
    params = "visit") 
@ResponseStatus(HttpStatus.CREATED) 
public String persistCycleCount(@RequestParam("visitId") Integer visitId, 
     @Valid @RequestBody CycleCount cycleCount, BindingResult result){ 
    if(result.hasErrors()){ 
     // Handler request errors 
    } 
    // Body method 
} 
+0

'RequestParam'を使用すると動作します。 JSONを検証するための '@ Valid'アノテーションをすでに持っている場合、' BindingResult'には何が必要ですか? – ddd

関連する問題