Как передать аргумент REST-контроллеру Spring Boot? - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь передать аргумент моему классу @RESTController Spring Boot.

В методе @POSTMapping я хочу использовать метод самоопределяемого класса Java для обработки полученного тела и возврата ответа.

Приложение Spring запускается в Application.java. Кажется, что Controller-Object создается неявно.

Я уже пытался добавить конструктор в мой класс RESTController. Но я не смог найти способ вызвать этот конструктор с аргументом.

// Application.java
public static void main (String[] args) {
    SpringApplication.run(Application.class, args);
}
//ConnectorService.java
@RestController
public class ConnectorService {

    private Solveable solver;

    public ConnectorService() {}

    public ConnectorService (Solveable solveable) {
        this.solver = solveable;
    }

    @CrossOrigin(origins = "http://localhost:3000")
    @PostMapping(path =  "/maze")
    public Solution Test(@RequestBody Test test) {
       return solver.solve(test);
    }

}

Несмотря на то, что я мог определить второй конструктор, я не нашел способа вызвать его с моим объектом.

Ответы [ 4 ]

2 голосов
/ 12 октября 2019

Используйте @ RequestParam аннотацию для передачи аргумента

1 голос
/ 12 октября 2019

Вы можете передать параметр с помощью @RequestParam аннотации следующим образом:

@CrossOrigin(origins = "http://localhost:3000")
@PostMapping(path =  "/maze")
public Solution Test(@RequestParam("paramName") String param, @RequestBody Test test) {
   return solver.solve(test);
}

И вы можете поставить его с помощью http запроса:

http://localhost:3000/maze?paramName=someValue

Предполагая, чтоу вас есть POST-запрос, могут быть разные способы его создания, в зависимости от используемых инструментов тестирования API.

0 голосов
/ 12 октября 2019

@ RestController следует тем же правилам для внедрения зависимостей, что и любой другой @Component в среде Spring. Если у вас есть один конструктор, Spring попытается «вставить» параметры при создании экземпляра контроллера.

Вам необходимо зарегистрировать свою зависимость как bean-компонент Spring.

Похоже, вы новичокк Spring, и вы начинаете с продвинутых тем, таких как Spring Boot и остальные контроллеры. Пожалуйста, найдите время, чтобы прочитать об основах.

0 голосов
/ 12 октября 2019

Yo может создать файл конфигурации Бина для инициализации ваших объектов, например:

@Configuration
@ComponentScan("com.xxx.xxx") // the base package you want to scan
public class Config {

    @Bean
    //where Solveable is a class and is annotated with an Spring's annotation
    public Solveable solveable() {
        return new Solveable();
    }

}

и использовать аннотацию @Autowired для добавления объекта в:

@Autowired    
public ConnectorService (Solveable solveable) {
      this.solver = solveable;
}

Этот последний блокинициализирует или передает (что вы хотите) объект в класс ConnectorService.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...