Spring Boot REST 应用程序出现“无可用消息”错误

新手上路,请多包涵

我已经创建了演示 Spring Boot 项目并实现了 Restful 服务,如此处所示

@RestController
public class GreetingsController {
    @RequestMapping(value="/api/greetings", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<String> getGreetings(){
        return new ResponseEntity<String>("Hello World", HttpStatus.OK);
    }
}

当我尝试使用 Postman 工具以 url“ http://localhost:8080/api/greetings ”作为请求方法 GET 调用服务时,出现以下错误消息

{
  "timestamp": 1449495844177,
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/api/greetings"
}

对于 Spring Boot 应用程序,我不必在 web.xml 中配置 Spring Dispatcher servlet。

有人可以帮我找出这里的遗漏点吗?

原文由 Naveen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 647
2 个回答

你可能错过了 @SpringBootApplication

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

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

@SpringBootApplication 包括 @ComponentScan 扫描它所在的包和所有子包。您的控制器可能不在其中任何一个中。

原文由 cahen 发布,翻译遵循 CC BY-SA 3.0 许可协议

三种可能的解决方案:

1)确保具有@Controller 的YourController.java 文件和具有@SpringBootApplication 的YourSpringBootFile.java 文件在同一个包中。

例如,这是错误的: 在此处输入图像描述

这是正确的方法: 在此处输入图像描述

所以你知道我在说什么,这是我的 WebController.java 文件:

 @RestController
public class WebController {
private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping(value= "/hi", method = RequestMethod.GET)
    public @ResponseBody Greeting sayHello(
            @RequestParam(value = "name", required = false, defaultValue = "Stranger") String name) {
        System.out.println("Inside sayHello() of WebController.java");
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}

这是我的 JsonPostExampleProj1Application.java:

 @SpringBootApplication
public class JsonPostExampleProj1Application {

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

  1. 如果您希望您的控制器位于 YourSpringBootFile.java 包之外的不同包中,请按照以下说明进行操作 = Spring:在应用程序主方法中运行多个“SpringApplication.Run()”

  2. 尝试在 Controller 类之上使用 @RestController 而不是 @Controller。

原文由 Gene 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题