2016-02-02 102 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的自定义处理程序,以提高您的服务的可发现性。 –