私のコントローラーには、空の文字列のnullであってはならないidを含むStringパラメーターがあります。私は疑問に思っています、@ RequestMapping paramsの空の文字列ではないことを確認する方法はありますか?私はいくつかの方法でそれを解決しようとしました
_@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) String id)
@RequestMapping(value = someURL, params = {"!id="})
public SomeResponse doSomething(@RequestParam(required = true) String id)
@RequestMapping(value = someURL, params = {"!id=\"\""})
public SomeResponse doSomething(@RequestParam(required = true) String id)
_
成功しませんでした。私が理解しているように、_params = {"id"}
_と@RequestParam(required = true)
の両方は、パラメーターid
がリクエストで提示されていることのみをチェックできます(!= null)。
おそらく、コントローラーbobyのコードでそれを確認する必要があります。
_if (id == null || id.isEmpty()) {
return someErrorResponse;
}
_
間違っている場合は修正してください。前もって感謝します。
追伸私のアプリは、Apache Tomcat 7.0.62コンテナでJava 1.7 SEで実行されています
その注釈を消費するSpringコードによると
org.springframework.web.servlet.mvc.annotation.ServletAnnotationMappingUtils.checkParameters(String[], HttpServletRequest)
このような何かが動作するはずです:
@RequestMapping(value = someURL, params = {"id!="})
public SomeResponse doSomething(@RequestParam(required = true) String id)
Java EE検証に準拠したEEになりたい場合は、@Size(min=1)
を使用してください。
Hibernate Validatorには@NotEmpty
この目的のための注釈。しかし、それはJava spec。
ところで、required=true
上記の通知は、リクエスト内のパラメータの存在を強制しません。
コメントに対する反応を編集:
SpringはJava EE Validationに準拠しているため、クラスパスにJava EE検証API実装子があれば、@ Sizeアノテーションが機能するはずです。したがって、これをクラスパスに追加することで、これらの検証機能を有効にできます。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.1.Final</version>
</dependency>
コントローラーに@Validated
注釈とこれを行う:
@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) @Size(min=1) String id)
クライアントに送信されるエラーメッセージをカスタマイズすることもできます。
Java EE検証に精通していない場合は、REST/HTTPエンドポイントを作成する場合に非常に重要であるため、検討を開始することをお勧めします。