Spring MVC + Jackson を使用して REST サービスを構築するプロジェクトがあります。次のJavaエンティティがあるとしましょう
public class MyEntity {
private Integer id;
private boolean aBoolean;
private String aVeryBigString;
//getter & setters
}
時々、ブール値を更新したいだけで、単純なブール値を更新するためだけにオブジェクト全体を大きな文字列で送信するのは良い考えではないと思います。そこで、PATCH HTTP メソッドを使用して、更新が必要なフィールドのみを送信することを検討しました。したがって、コントローラーで次のメソッドを宣言します。
@RequestMapping(method = RequestMethod.PATCH)
public void patch(@RequestBody MyVariable myVariable) {
//calling a service to update the entity
}
問題は、どのフィールドを更新する必要があるかをどうやって知るかです。たとえば、クライアントがブール値を更新したいだけの場合、空の「aVeryBigString」を持つオブジェクトを取得します。ユーザーがブール値を更新したいだけで、文字列を空にしたくないことをどうやって知ることができますか?
カスタム URL を作成することで、この問題を「解決」しました。たとえば、次の URL: POST /myentities/1/aboolean/true は、ブール値の更新のみを許可するメソッドにマップされます。このソリューションの問題点は、REST に準拠していないことです。REST に 100% 準拠したくはありませんが、各フィールドを更新するためにカスタム URL を提供することに不安を感じています (特に、複数のフィールドを更新する場合に問題が発生することを考えると)。
別の解決策は、「MyEntity」を複数のリソースに分割し、これらのリソースを更新することですが、意味がないように感じます.「MyEntity」はプレーンなリソースであり、他のリソースで構成されていません.
では、この問題を解決するエレガントな方法はありますか?