收到“无可用消息”错误与弹簧启动 + REST 应用程序

2022-09-01 22:38:44

我已经创建了演示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);
    }
}

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

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

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

有人可以帮我找出这里缺失的点吗?


答案 1

你可能错过了:@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


答案 2

三种可能的解决方案:

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

例如,这是错误的:enter image description here

这是正确的方法:enter image description here

所以你知道我在说什么,这是我的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);
    }
}

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

3) 尝试使用@RestController,而不是在 Controller 类之上@Controller。