2016-02-02 101 views
4

我正在使用spring-data-rest。防止spring-data-rest中的HTTP方法

鑑於以下庫:

@RepositoryRestResource 
public interface MyRepository extends PagingAndSortingRepository<MyEntity, Long> {} 

save()方法的註釋@RestResource(exported = false)使框架使用方法時,POST,PUT和PATCH返回405 Method Not Allowed錯誤。

我的問題:如何在PUT方法上返回405錯誤,同時POST和PATCH仍然允許使用此存儲庫?

謝謝!

回答

0

您可以在options-probe的響應中添加允許的方法。

@RequestMapping(method = RequestMethod.OPTIONS) 
ResponseEntity<Void> getProposalsOptions() { 
    HttpHeaders headers = new HttpHeaders(); 
    headers.setAllow(new HashSet<>(Arrays.asList(OPTIONS, PATCH, POST))); 
    return new ResponseEntity<>(headers, HttpStatus.NO_CONTENT); 
} 

這隻允許Options, Patch, Post作爲請求方法。對於其他所有嘗試過的方法,您將得到一個HTTP-405錯誤。

+0

您的解決方案分配_Options,PATCH,POST_到響應的_Allow_頭,但它並沒有禁止其他方法。 –

2

@SWiggels 感謝您的回覆:) 您的解決方案對我無效...... PUT始終是允許的。

對於其他人,我發現這一個工作:

@BasePathAwareController 
public class MyEntityController { 

    @RequestMapping(value = "/myentity/{id}", method = RequestMethod.PUT) 
    public ResponseEntity<?> preventsPut() { 
     return new ResponseEntity<>(HttpStatus.METHOD_NOT_ALLOWED); 
    } 
} 
+1

您確實需要覆蓋PUT處理程序的默認行爲。您還應該添加一個如@SWiggels所示的OPTIONS的自定義處理程序,以提高您的服務的可發現性。 –