Я пытаюсь создать пользовательские методы в репозитории и контроллере 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.

Какие-либо предложения?

0
Tiffany Messer