Spring Boot, использующий одну и ту же конечную точку для вызова 2 функций (необязательные параметры) - PullRequest
1 голос
/ 02 мая 2020

Я пытаюсь выяснить, как у меня может быть одна конечная точка /api/test со следующими критериями.

Есть 3 необязательных параметра, foo, bar & dove

Мне нужно два ответы, основанные на их комбинациях.

Например,

/api/test?foo=foo&bar=bar (calls function to return ObjectA)


/api/test?foo=foo&dove=dove (calls function to return ObjectB)

Это сработало бы, если бы у меня были уникальные параметры для каждого URL-адреса, но они оба разделяют foo. Как я могу отобразить их отдельно, даже если они имеют необязательный параметр?

Вот что я попробовал:

@Controller
@RequestMapping("/api/test")
.
.
.
@GetMapping(params={"bar"})
public List<ObjectA> getAllObjectA(@RequestParam("bar") String bar,
                                   @RequestParam("foo") Optional<String> foo){

    return service.getAllObjectA(bar, foo.orElse("");
}

@GetMapping(params={"dove"})
public List<ObjectB> getAllObjectB(@RequestParam("dove") String dove,
                                   @RequestParam("foo") Optional<String> foo){

    return service.getAllObjectB(dove, foo.orElse(""));
}

Есть ли способ выполнить sh это?

Ответы [ 2 ]

3 голосов
/ 02 мая 2020

Вы можете изменить свой код для возврата ResponseEntity<?>

 if (some condition) {
    return new ResponseEntity<List<ObjectA>>(service.getAllObjectA(bar, foo.orElse(""), HttpStatus.OK);
} else if (...) {
    return new ResponseEntity<List<ObjectB>>(service.getAllObjectB(dove, foo.orElse(""), HttpStatus.OK);
}
0 голосов
/ 02 мая 2020

Отображение двух конечных точек в зависимости от значения параметра невозможно. Вы можете сделать это с одной конечной точкой фактически и вернуть условно

@GetMapping
public ResponseEntity<?> getAllObjectA(@RequestParam("objtype") String objtype,
                                   @RequestParam("foo") Optional<String> foo){

     if (objtype.equals("bar")) {
        return new ResponseEntity<List<ObjectA>>(service.getAllObjectA(objtype, foo.orElse(""), HttpStatus.OK);
    } else if (objtype.equals("dove")) {
        return new ResponseEntity<List<ObjectB>>(service.getAllObjectB(objtype, foo.orElse(""), HttpStatus.OK);
    }
}
...