【问题标题】:@RestController returning blank@RestController 返回空白
【发布时间】:2018-11-27 08:46:36
【问题描述】:

我正在构建我的第一个 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!";
        }

}

如果我查看日志,我可以看到“/hi”映射:

  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 方法中。
  • @ResponseBody 注释在这里不会产生影响,该类使用@RestController 进行注释,从而使@ResponseBody 过时
  • 你试过公开home()吗?
  • 尝试在您的@RequestMapping 中添加method = RequestMethod.GET,例如@RequestMapping(value = "/hi", method = RequestMethod.GET)

标签: spring spring-mvc spring-boot


【解决方案1】:

@RestController = @Controller + @ResponseBody 这意味着当您在 http:localhost:8080/hi 调用您的 api 时,响应的正文将包含 home() 处理程序的结果,即“Hello world”。

@RestControllerbehind 使 Spring MVC 使用 Json 消息转换器(默认情况下),并且带有 @RestController 注释的类中的所有处理程序方法都将返回 JSON,这就是您在浏览器上看不到文本的原因.

您可以使用 Postman 或 ARC 来测试您的应用。某些网络浏览器(如 Firefox)直接显示 JSON。

【讨论】:

  • 我刚刚意识到我只有在添加 cxf 服务时才会得到空白页,是吗?我编辑了问题以获取更多详细信息
  • 是的,它可能与您注册新的 servlet 相关。默认的“DispatcherServlet”不再显式映射。查看您的调试 Web 控制台(按 F12)或 IDE 的控制台。
  • 我只是好奇,您正在开始一个新项目,为什么要使用 Apache CXF?
  • 我使用 CXF 的唯一原因是我要使用的 WS 是使用 CXF 编码的。有更好的选择吗?
猜你喜欢
  • 2018-12-23
  • 2017-11-20
  • 1970-01-01
  • 2011-05-27
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多