Я пытаюсь создать пользовательские методы в репозитории и контроллере MongoDB, чтобы я мог фильтровать по нескольким различным параметрам. Один параметр на пользовательский метод.
У меня есть база данных MongoDB, в которой есть коллекция документов 'doc'.
Документ 'doc' с использованием db.docs.find (). Pretty () выглядит следующим образом:
"_id" : ObjectId("12345"),
"threat_types" : ["type1", "type2" ],
"document_title" : "Pop Tarts",
"creation_date" : "Unknown",
"doc_type" : "HTML",
"status" : "Squid",
"threat_level" : "Jupiter",
URL, на который я пытаюсь попасть, это:
http://localhost:8080/documents/DocType/HTML
Репозиторий:
Note: The find by ID and FindAll methods work. It is the custom methods 'findDocByDocType', 'findDocByThreatTypes', and 'findDocByThreatLevel' that are sending 404 errors.
@RepositoryRestResource(collectionResourceRel = "documents", path = "documents")
public interface DocRepository extends MongoRepository<Doc, String>
{
public Doc findBy_id(ObjectId _id);
public List<Doc> findByStatus(String status);
public List<Doc> findDocByDocType(@Param("docType") String docType);
public List<Doc> findDocByThreatTypes(@Param("threatTypes")String threatTypes);
public List<Doc> findDocByThreatLevel(@Param("threatLevel")String threatLevel);
}
Контроллер:
@RestController
@RequestMapping("/documents")
public class DocController {
@Autowired
private DocRepository docRepository;
@RequestMapping(value = "/", method = RequestMethod.GET)
public List<Doc> getAllDoc() {
return docRepository.findAll();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Doc getDocById(@RequestParam("id") ObjectId id) {
return docRepository.findBy_id(id);
}
//threatLevel
@RequestMapping(value = "threatLevel/{threatLevel}", method = RequestMethod.GET)
public List<Doc> getDocByThreatLevel(@RequestParam("threatLevel") String threatLevel) {
return docRepository.findDocByThreatLevel(threatLevel);
}
//ThreatTypes
@RequestMapping(value = "threatTypes/{threatTypes}", method = RequestMethod.GET)
public List<Doc> getDocByThreatTypes(@RequestParam(name = "threatTypes") String threatTypes) {
return docRepository.findDocByThreatTypes(threatTypes);
}
//docType
// http://localhost:8080/documents/DocType/HTML
@RequestMapping(value = "/docType/", params="docType", method = RequestMethod.GET)
@ResponseBody
public List<Doc> getDocByDocType(@RequestParam String docType) {
return docRepository.findDocByDocType(docType);
}
}
Я могу видеть индекс документов в localhost8080 / documents
и я могу искать по идентификатору на localhost: 8080 / documents / 12345
( Yay ~ )
В данный момент я специально пытаюсь заставить работать конечную точку Doc Type. (Я думаю, что если я смогу заставить одного работать, остальное будет таким же.)
Я смотрел на добавление @Query в хранилище. Я изменил контроллер с @PathVariable на @RequestParam, но, похоже, ничего из того, что я прочитал в руководствах или документах, не работает. Каждая конечная точка, которую я пытаюсь получить, получает ошибку 404.
Какие-либо предложения?
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].