WedX - журнал о программировании и компьютерных науках

@RestController возвращает пустое значение

Я создаю свое первое приложение Spring Boot. Но я не могу получить правильный ответ контроллера requestMapping.

Это мой основной класс:

package com.hello.world;

@SpringBootApplication 
public class HelloWorld implements CommandLineRunner{

    public static void main(String[] args) {
        SpringApplication.run(HelloWorld.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
    ....
}

}

А это мой RestController:

package com.hello.world.controllers;


@RestController
public class UrlMappingControllers {


        @RequestMapping("/hi")
        String home() {
            return "Hello World!";
        }

}

Если я взгляну на журнал, я увижу сопоставление «/ привет»:

  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/hi]}" onto java.lang.String com.hello.world.controllers.UrlMappingControllers.home()

Но когда я обращаюсь к: http:localhost:8080/hi, я получаю пустую страницу, я ожидал увидеть текст «Hello World».

Почему я получаю пустую страницу?

--- Редактировать ----

Я только что понял, что получаю пустую страницу только тогда, когда добавляю службу cxf. Я думаю, это потому, что аннотация @configuration для этого класса:

package com.hello.world.helloWorld.configuration;

@Configuration
public class CXFConfiguration {
         @Bean
         public ServletRegistrationBean dispatcherServlet() {
             return new ServletRegistrationBean(new CXFServlet(), "/services/*");
         }

         @Bean(name=Bus.DEFAULT_BUS_ID)
         public SpringBus springBus() {
             SpringBus springBus = new SpringBus();
        return springBus;
         }


         @Bean
            public Endpoint endpointGreentingService() {
                EndpointImpl endpoint = new EndpointImpl(springBus(), new GreetingServiceImpl());
                endpoint.getFeatures().add(new LoggingFeature());
                endpoint.publish("/GreetingService");
                return endpoint;
        }
}

Может ли это быть связано?


  • Добавьте аннотацию @ResponseBody к методу home. 18.06.2018
  • Аннотация @ResponseBody здесь не имеет значения, класс аннотирован @RestController, что делает @ResponseBody устаревшим. 18.06.2018
  • Вы пытались сделать home() общедоступным? 18.06.2018
  • Попробуйте добавить method = RequestMethod.GET в свой @RequestMapping, например. @RequestMapping(value = "/hi", method = RequestMethod.GET) 19.06.2018

Ответы:


1

@RestController = @Controller + @ResponseBody, что означает, что когда вы вызываете свой API в http:localhost:8080/hi, тело ответа будет содержать результат обработчика home(), то есть «Hello world».

@RestControllerза сценой заставляет Spring MVC использовать конвертер сообщений Json (по умолчанию), и все методы обработчика внутри класса, отмеченного @RestController, будут возвращать JSON, поэтому вы не видите свой текст в своем браузере.

Вы можете использовать Postman или ARC для тестирования своего приложения. Некоторые веб-браузеры, такие как Firefox, напрямую отображают JSON.

18.06.2018
  • Я только что понял, что получаю пустую страницу только тогда, когда добавляю службу cxf, может быть? Я отредактировал вопрос для более подробной информации 19.06.2018
  • Да, это может быть связано с регистрацией нового сервлета. `DispatcherServlet' по умолчанию больше не отображается явно. Взгляните на свою веб-консоль отладки (нажмите F12) или на консоль вашей IDE. 19.06.2018
  • Мне просто любопытно, вы начинаете новый проект, почему вы используете Apache CXF? 19.06.2018
  • Единственная причина, по которой я использую CXF, заключается в том, что WS, которые я собираюсь использовать, написаны с использованием CXF. Есть ли лучшая альтернатива? 19.06.2018
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]