我想使用 spring data mongodb 添加可选查询参数。
控制器代码:
@RestController
private final ActionService actionService;
@RequestMapping(value = "/action/{id}", method = RequestMethod.GET)
public ResponseEntity<List<Action>> getActionList(@PathVariable("id") long id,
@RequestParam(value = "actionType", required = false) ActionType actionType,
@RequestParam(value = " ", required = false) String[] params) {
List<Action> actionList = actionService.getAction(id, actionType, params);
return new ResponseEntity<>(actionList, HttpStatus.OK);
}
ActionServiceImpl.java
private ActionRepository actionRepository;
public List<Action> getAction(long id, ActionType type, String... var1) {
return actionRepository.getByActionType(id, type, var1.length > 0 ? var1[0] : "", var1.length > 1 ? var1[1] : "", var1.length > 2 ? var1[2] : "");
}
ActionRepository.java
@Repository
public interface ActionRepository extends MongoRepository<Action, String> {
@Query(value = "{ 'id' : ?0 , 'actionType' : ?1 , 'param1' : ?2 , 'param2': ?3 , 'param3' : ?4 } ")
List<Action> getByActionType(long id, ActionType type, String var1, String var2, String var3);
}
注意:“id”是必填字段,操作类型和参数是可选的。无论是否传递操作类型/参数,我都想根据“id”获取数据。目前,我在“ActionServiceImpl”中遇到空指针异常,因为我没有传递参数和操作类型。 “动作类型”是枚举。
有人可以帮助我更改 ActionRepository @Query 标签,这样我就可以根据 id 获取数据,而无需传递 actionType 或参数。例如如果我传递操作类型,那么 mongo 查询应该根据“id $or actionType”给出结果。