Как я могу внедрить bean-компонент в свой контроллер с помощью spring boot?

Я попробовал @Autowired, но это не сработало.

вот мой боб:

@Bean(name = "getModels")
public JSONObject getModels() throws ClassNotFoundException {
    return scannerService.getModels(Test.class , Pc.class);
}

и есть мой контроллер

@RequestMapping(value = "/classes", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public String getAdminParams() throws JSONException, ClassNotFoundException {

    ApplicationContext context = new 
    AnnotationConfigApplicationContext(CreateModels.class);
    CreateModels createModels = (CreateModels) context.getBean("getModels");

    return createModels.toString() ;
}

Это во многом неверно ... Я бы посоветовал взглянуть на простой весенний урок.

Lino 10.08.2018 15:52

Не могли бы вы показать класс scannerService?

Lino 10.08.2018 15:53

Никогда не создавайте новый контекст приложения. Сообщите нам именно так, что вы пробовали (с соответствующим кодом), и сообщите нам именно так, как это не работает. Однако мне трудно понять, почему вы думаете, что этот JSONObject должен быть bean-компонентом.

JB Nizet 10.08.2018 15:54

@ Лино Верно? Я не уверен, с чего начать .... во-первых, возникают ли у вас какие-либо ошибки? Что возвращает класс scannerService? Почему тип bean-компонента JSONObject и тип объекта с автоматическим подключением CreateModels?

gkgkgkgk 10.08.2018 15:54

у меня есть bean-компонент, который возвращает jsonObject, и я хочу использовать этот bean-компонент в своем контроллере, как я могу это сделать?

zakaria madhouni 10.08.2018 16:01
4
5
63
2

Ответы 2

Вероятно, именно так вы должны были создавать и использовать bean-компонент:

@Service
public class ModelService{ // or whatever
    private final ScannerService scannerService;

    @Autowired
    public ModelService(ScannerService scannerService){
        this.scannerService = scannerService;
    }

    public JSONObject getModels() throws ClassNotFoundException{
        return scannerService.getModels(Test.class, Pc.class);
    }        
}

А затем в свой контроллер введите этот ModelService (или имя, которое вы дали):

// your annotations
public class Controller{ // your name
    private final ModelService modelService;

    public Controller(ModelService modelService){
        this.modelService = modelService;
    }

    @RequestMapping(value = "/classes", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public String getAdminParams() throws JSONException, ClassNotFoundException{
        return modelService.getModels().toString();
    }
}

Это, конечно, всего лишь пример, и вам придется адаптировать его для работы с вашим текущим кодом. Но, как правило, указывать значение (например, результат от scannerService.getModels()) как @Bean - очень плохая идея. Лучше всего было бы создать объект-держатель.

да, но я хочу загрузить свой объект json при запуске приложения, поэтому я делаю его bean-компонентом и хочу использовать этот jsonObject в своем контроллере. поэтому делать запрос каждый раз, когда я хочу использовать свой jsonObject, не очень хорошая идея

zakaria madhouni 10.08.2018 16:16

я решаю это

есть боб

@Bean("models")
public JSONObject getModels() throws ClassNotFoundException {

    return scannerService.getModels(Test.class , Pc.class);
}

и я ввожу его в свой контроллер

@Autowired
@Qualifier("models")
JSONObject models;

Другие вопросы по теме