Rest Spring bean используя конфигурацию xml - PullRequest
0 голосов
/ 08 июня 2018

Я использую бины Rest Spring, используя конфигурацию xml.Я пытаюсь получить доступ к переменным, которые инициализируются bean-компонентами, используя URL-адреса REST.Но я не могу получить значения.полученные значения равны нулю.В любом случае можно ли инициализировать значения и сохранять их нетронутыми и получать к ним доступ, когда я звоню по URL-адресам.

Пожалуйста, предложите какой-нибудь способ.

TIA

Редактировать: Модель:

@Repository
public class Topic{

    private Integer id;
    private String name;
    //Getter and setter with constructor
}

Класс контроллера:

@RestController
@Singleton
public class TopicController{

    @Autowired
    private TopicService topicService;


    public void setTopicService(TopicService topicService) {
        this.topicService = topicService;
    }

    @RequestMapping("/topics")
    public List<Topic> getAllTopics() {
        System.out.println("in get all topics");
        return topicService.getAllTopics();
    }
}

ServiceClass:

@Service
public class TopicService {

    @Autowired
    private List<Topic> allTopics ;

    public TopicService() {
    }
    public List<Topic> getAllTopics() {
        return allTopics;
    }

    public void setAllTopics(List<Topic> allTopics) {
        this.allTopics = allTopics;     
    }
}

Bean.xml

<bean name="topicService" id="topicService"
    class="org.springtest.service.TopicService">
    <property name="allTopics">
        <list>
            <bean class="org.springtest.model.Topic">
                <property name="id" value="20" />
                <property name="name" value="topic20" />
            </bean>
            <bean class="org.springtest.model.Topic">
                <property name="id" value="30" />
                <property name="name" value="Topic30" />
            </bean>

        </list>
    </property>
</bean>

<bean id="topicController"
    class="org.springtest.controller.TopicController"
    scope="singleton">
    <property name="topicService" ref="topicService"></property>
</bean>

Выход /localhost:8080/topics: {"id":null,"name":null}

Основной класс:

public static void main(String[] args) {
    SpringApplication.run(CourseApiApp.class, args);
    ApplicationContext context = new      
        ClassPathXmlApplicationContext("main/resources/Bean.xml");
    TopicController tc= new TopicController();
    System.out.println(tc.getAllTopics().size());// throwing nullpointerexception as topicService is null
}

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Это потому, что в основном методе у вас есть: TopicController tc= new TopicController();, что неправильно.TopicController должен быть создан Spring в вашем классе Main с использованием внедрения зависимостей.Над методом main вы должны написать @Autowired private TopicController tc; и удалить переменную "tc" в основном методе.

0 голосов
/ 08 июня 2018

Я предлагаю вам взглянуть на Джерси.Это REST-фреймворк, один из лучших на мой взгляд.Обязательно используйте снимок последней версии Джерси (я полагаю, что это версия 3), поскольку он будет иметь полную поддержку Spring.

Его использование простое.Контроллер метода будет иметь 5 линий вершин.Это также поощряет пользователей к лучшим методам API RESTful.Например, определение заголовка местоположения в успешной публикации, заголовки ссылок, ссылающиеся на подкачку в коллекции, среди прочего.

С Maven или Gradle в вашем проекте, интеграция Джерси займет у вас 5 минут.

Я использую его в Spring, потому что его единственная цель - реализовать REST API, в то время как у Spring это просто как функция.

Я прошу прощения за отсутствие решения, просто спросите меня, нужна ли вам помощь для начала работы.

Андрес

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