2017-07-05 1 views
2

私はspring-data-restを使用しており、リポジトリを介して自分のエンティティをCRUDするためのエンドポイントを公開しています。
エンティティの1つはPATCH/PUTメソッドで更新可能ですが、POSTメソッドで新しいインスタンスを作成することはできません。@RepositoryRestResourceでPATCH/PUTをエクスポートしますがPOSTはしません

それだけでいくつかの要求をエクスポートすることはできないようですので、両方のアクションがsave方法を経るようだ:

@RestResource(exported = ?) 
@Override 
<S extends User> S save(S s); 

それを達成するための最良の方法は何ですか?
saveメソッドをオーバーライドする必要がありますか?カスタムValidatorと書いてください。

答えて

2

あなたは

  • Validatorsを使用して、errorsパラメータ

  • Event Handlersにエラーを追加する例外をスローし、キャッチすることができるカスタムメッセージやHTTPステータスコードを返します@ControllerAdvice、によって

  • Custom Controllersを入力し、手動でリクエストを処理します。この回答を参照してください:最初の二つはBeforeCreateEventに耳を傾けなければならないhttps://stackoverflow.com/a/41351429/7226417

+0

これらの解決策のいずれかを使用すると、OPTIONSリクエストは、正しくないヘッダーで「Allow:POST、...」を返すでしょうか? – Piotr

+0

そうだと思います。私はOPTIONS-Mappingを操作することができる3番目のオプションを追加しました。 – benkuly

+0

ありがとうございます。第三の選択肢は私のために働いた。 – Piotr

0

一つの解決策は、ターゲットURLにPOSTリクエストのためのアクセスを拒否するようにWebSecurityConfigurerAdapter(spring-security-configで利用可能)を拡張することです:

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests() 
       .antMatchers(HttpMethod.POST, "/path_to_target_url").denyAll(); 
    } 

} 

ターゲットURLに投稿しようとするが401 Unauthorizedエラーで失敗します。

関連する問題