【发布时间】:2018-10-10 18:27:42
【问题描述】:
嗯,这是我在 * 上的第一个问题,所以我希望我能很好地解释我的问题 :-)
我正在使用 Spring Data Rest MongoDB。我正在使用一些仅通过实现 MongoRepository 就可用的“魔术”方法,但我也在使用自定义实现和 RestController。所以让我给你看一些代码:
我的存储库如下所示:
public interface BookRepository extends MongoRepository<Book, String>{
//here are some methods that don't play a role here
}
现在我的前端由优秀的旧 AngularJS 制作,并在资源的自链接上调用一些神奇的 Spring Data Rest 方法,如 GET 和 PUT。但是现在我在调用 PUT 后需要一些服务器端日志记录。所以我决定为 PUT 做一些自己的实现——但不是为 GET。 PUT 工作正常,但不幸的是 GET 不再工作。我的日志中总是出现“不支持请求方法 'GET'”。
我的 RestController 现在看起来像这样:
@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)));
}
}
这里是我前端的 GET 和 PUT 示例:
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}
});
}
}
所以现在我的问题是:是因为 PUT 和 POST 使用相同的 URL(书籍资源的自链接) - 我必须为一个 URL 实现所有 HTTP 方法还是不实现?有什么我错过的吗?
【问题讨论】:
标签: spring angular mongodb rest http