我正在编写一个Spring Boot应用程序。我编写了一个简单的控制器,每当endpoint被命中时就会被调用,但它仍然返回状态404,而不是指定的返回值。
HelloController
@Controller
public class MessageRequestController {
@RequestMapping(method = RequestMethod.GET, value = "/hello", produces = "application/json")
public String hello() {
System.out.println("Hit me!");
return "Hello, you!";
}
}
现在,每当我调用localhost:8080/hello
时,我都会看到控制台日志Hit me!
,但是你好,你!
永远不会返回。邮递员输出:
{
"timestamp": 1516953147719,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/hello"
}
应用JAVA
@SpringBootApplication
@ComponentScan({"com.sergialmar.wschat"}) // this is the root package of everything
@EntityScan("com.sergialmar.wschat")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
正如您所看到的“打我”,没有映射问题,但是在您的“请求映射”注释中,您指定了一个“应用程序/json”的产生类型,并返回一个没有格式化且没有任何头的简单可怜的字符串(“内容类型:应用程序/json”)。
添加标题并格式化输出。
简短版本:
用ResponseBody注释endpoint方法,将返回值绑定到响应体。
@Controller
public class MessageRequestController {
@RequestMapping(method = RequestMethod.GET, value = "/hello", produces = "application/json")
@ResponseBody
public String hello() {
System.out.println("Hit me!");
return "Hello, you!";
}
}
您可以改为使用RestController而不是Controller
注释类,以将ResponseBody
应用于类的每个方法。
@RestController
public class MessageRequestController {
@RequestMapping(method = RequestMethod.GET, value = "/hello", produces = "application/json")
public String hello() {
System.out.println("Hit me!");
return "Hello, you!";
}
}
在@Controller中,使用SpringWebMVC中的默认模型视图,实际上是在告诉Spring渲染名为Hello,you!的视图!。tml
来自您的参考资料目录(src/main/resources/templates
用于Spring Boot项目,如果我没记错的话)。
有关Spring MVC REST工作流的更多信息,请阅读本文。
一旦您更加熟悉这些概念,就可以使用ResponseEntity进一步定制endpoint方法。
改变你的方法返回一个<代码>响应实体
@RequestMapping(method = RequestMethod.GET, value = "/hello", produces = "application/json")
public ResponseEntity<String> hello() {
System.out.println("Hit me!");
return new ResponseEntity<String>("Hello, you!", HttpStatus.OK);
}
或者将控制器更改为RestController
@RestController
public class MessageRequestController {...}
卷曲
ubuntu:~$ curl -X GET localhost:8080/hello
Hello, you!
你好,我是拉威尔的新手,也许这对你们来说太傻了。在laravel 8中,路由web。php我创建了一条如下的路线: 我想问的是,我们也可以从回调视图返回控制器吗?所以在路由 /editprofile中,第二个参数不是'App\Http\Controller\SiteController@edit_profile',而是一个回调函数,如路由'/home'。 但是它返回错误哈哈。假设我不想用__con
如果可以从Spring返回,我很好奇 这样做可以吗?我试过了,Spring返回的不是流的值。 我应该继续返回
我很难理解mono 的用法。请问这个Mono 能给Mono带来什么样的好处? 谢谢。
我是新来的Spring应用程序。我试图创建小Spring应用程序,但我得到404错误消息。似乎控制器(indexController)没有开始调用。我累了调试,但它不在那里。 文件位置: /WebContent/WEB-INF/pages/index.html /WebContent/WEB-INF/HelloWebServlet。xml /WebContent/WEB-INF/web.xml H
我一直在思考使用Spring MVC设计JSON API的最佳方法。众所周知,IO很昂贵,因此我不想让客户端进行多次API调用以获得他们需要的东西。然而,与此同时,我不一定想归还厨房水槽。 例如,我正在开发一个类似于IMDB的游戏API,但用于视频游戏。 如果我返回与游戏相关的所有内容,它将看起来像这样。 /api/game/1 然而,他们可能不需要所有这些信息,但他们可能需要这些信息。从I/O和