Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 请求方法';获取';实现PUT后不支持_Spring_Angular_Mongodb_Rest_Http - Fatal编程技术网

Spring 请求方法';获取';实现PUT后不支持

Spring 请求方法';获取';实现PUT后不支持,spring,angular,mongodb,rest,http,Spring,Angular,Mongodb,Rest,Http,好的,这是我关于Stackoverflow的第一个问题,所以我希望,我已经很好地解释了我的问题:-) 我正在使用Spring数据Rest MongoDB。我正在使用一些“神奇”的方法,这些方法仅通过实现MongoRepository就可以使用,但我也在使用自定义实现和RestController。让我向您展示一些代码: 我的存储库如下所示: public interface BookRepository extends MongoRepository<Book, String>{

好的,这是我关于Stackoverflow的第一个问题,所以我希望,我已经很好地解释了我的问题:-)

我正在使用Spring数据Rest MongoDB。我正在使用一些“神奇”的方法,这些方法仅通过实现MongoRepository就可以使用,但我也在使用自定义实现和RestController。让我向您展示一些代码:

我的存储库如下所示:

public interface BookRepository extends MongoRepository<Book, String>{
   //here are some methods that don't play a role here
}

现在我的问题是:是因为PUT和POST使用相同的URL(图书资源的自链接)——我必须为一个URL实现所有HTTP方法还是不实现?我错过了什么吗

每个端点都需要一个谓词,因此需要@RequestMapping(method=RequestMethod.GET)方法来处理GET请求

另一方面,Spring团队建议:

公共BookRestController(ResourceProcessor bookResourceProcessor,BookRepository BookRepository){ this.bookResourceProcessor=bookResourceProcessor; this.bookRepository=bookRepository; }
谢谢你的回答,只是想确保我们彼此理解正确:在我实现示例中的PUT方法之前,由于RepositoryRestResource注释,PUT和GET工作(我在示例中忘记了这一点,我将添加它)。我只是想知道为什么现在在实现PUT时GET不工作。所以你说的意思是,我必须在实现其中一个动词后立即实现这两个动词?没问题,你的BookRestController没有GET handle。实际上,如果你不指定RequestMapping,同一个方法可以处理所有动词。当您专门添加PUT时,它不再是默认值,因此您还需要指定GET以允许GET请求。我知道没有GET处理程序。我想覆盖PUT,但仍然有其他HTTP方法(如SpringDataREST)自动公开它们。也许写了以下问题的人解释得更好:
@RepositoryRestController
@RequestMapping("/book/{mongoId}")
public class BookRestController {

    @Autowired
    private ResourceProcessor<Resource<Book>> bookResourceProcessor;

    @Autowired
    private BookRepository bookRepository;

    private static Logger LOG = 
        Logger.getLogger(BookRestController.class);


    @RequestMapping(method = RequestMethod.PUT,
        consumes = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    ResponseEntity<Resource<Book>> updateBookAndLog(
        @RequestBody Book book,
        @PathVariable(value = "mongoId") String mongoId,
        @RequestHeader("MyApp-User") String userId,
        @RequestHeader("MyApp-Action") String action) {

        Book bookBeforeUpdate = bookRepository.findOne(mongoId);
        LOG.info("Log something");

        book.setMongoId(mongoId);
        Book responseBook = bookRepository.save(book);

        return ResponseEntity.ok(bookResourceProcessor.process(new 
           Resource<book>(responseBook)));
    }
}
myApp.factory('Book', function($http, $q, ConfigurationHelper) {

    return {
       getById: function (bookId) {
          return $http.get('book/' + bookId);
       },

       save: function(book, userId, action) {
            return $http.put(book._links.self.href, book,
                {headers: {"MyApp-User": userId,
                        "MyApp-Action" : action}
                });
        }
    }
public BookRestController(ResourceProcessor<Resource<Book>> bookResourceProcessor, BookRepository bookRepository) {
  this.bookResourceProcessor = bookResourceProcessor;
  this.bookRepository = bookRepository;
}