хорошо, это мой первый вопрос о Stackoverflow, поэтому я надеюсь, что я достаточно хорошо объясняю свою проблему: -)
Я работаю с Spring Data Rest MongoDB. Я использую некоторые «магические» методы, которые доступны только при реализации MongoRepository, но я также использую пользовательские реализации и RestController. Итак, позвольте мне показать вам код:
Мой репозиторий выглядит так:
public interface BookRepository extends MongoRepository<Book, String>{
//here are some methods that don't play a role here
}
Теперь мой Frontend сделан из старого доброго 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-адрес (собственную ссылку на ресурсы книги) - нужно ли мне реализовывать все методы HTTP для одного URL-адреса или ни одного? Есть ли что-то, что я пропустил?