使用春天响应性来操纵HTTP响应
最后修改:2021年4月15日
1.介绍
使用春天,我们通常有很多方法来实现相同的目标,包括微调HTTP响应。
在此简短的教程中,我们将看到如何使用HTTP响应的主体,状态和标题使用响应。
进一步阅读:
2。响应
响应代表整个HTTP响应:状态代码,标题和身体。结果,我们可以使用它来完全配置HTTP响应。
如果我们想使用它,我们必须从端点返回它;春天照顾休息。
响应是一种通用类型。因此,我们可以使用任何类型作为响应主体:
@getmapping(“/ hello”)anderthentity hello(){return new andertentity <>(“Hello World!”,httpstatus.ok);}
由于我们以编程方式指定响应状态,因此我们可以为不同的场景返回不同的状态代码:
@getmapping(“/年龄”)响应年龄(@requestparam(“overfabiftabri胎”)int over yefitabirth){if(isinfuture(ovefuture(多年)){返回新的响应<>(“出生年份不能未来的年份”,httpstatus.bad_request);}返回新的响应<>(“您的年龄是”+计算(多年繁琐),httpstatus.ok);}
此外,我们可以设置HTTP标头:
@getmapping(“/ customheher”)andertentity customheher(){httpheaders标题= new httpheaders();标题.Add(“自定义标题”,“foo”);返回新的andertentity <>(“自定义标题集”,标题,httpstatus.ok);}
此外,响应提供两个嵌套构建器接口:标题为及其子接口,爱好健美者。因此,我们可以通过静态方法访问它们的能力响应。
最简单的情况是使用正文和HTTP 200响应代码的响应:
@getmapping(“/ hello”)andertentity hello(){return anderthententity.ok(“Hello World!”);}
最受欢迎HTTP状态代码我们获得静态方法:
BodyBuilder接受();BodyBuilder Badrequest();BodyBuilder创建(Java.net.Uri位置);headersbuilder <?> nocontent();标题<?> notfound();BodyBuilder OK();
另外,我们可以使用BodyBuilder状态(HttpStatus状态)和BodyBuilder状态(INT状态)设置任何HTTP状态的方法。
最后,有响应
@getmapping(“/年龄”)analystity 年龄(@requestparam(“overfabirth”)int over yefbirth){if(isinfuture(ovefuture(多年)){return anallytentity.badrequest()。Body(“出生年不可能未来”);返回analystity.status(httpstatus.ok).body(“您的年龄是”+计算(多年捕获));}
我们还可以设置自定义标题:
@getmapping(“/ compounheher”)andertentity customheader(){return andertherentity.ok().header(“自定义标题”,“foo”).body(“自定义标题集”);}
自从BodyBuilder.Body()返回A.响应代替健美运动员,它应该是最后一个电话。
注意标题我们无法设置响应机构的任何属性。
返回时响应
Spring 3.2为全球带来了支持@ExceptionHandler.与新的@ControllAdvice.注解,处理这些方案。有关深入的详细信息,请参阅现有文章这里。
尽管响应非常强大,我们不应该过度使用它。在简单的情况下,还有其他满足我们需求的其他选项,它们导致更清晰的代码。
3.替代品
3.1。@ResponseBody.
在经典的Spring MVC应用中,端点通常返回呈现的HTML页面。有时我们只需要返回实际数据;例如,当我们使用带有Ajax的端点时。
在这种情况下,我们可以标记请求处理程序方法@ResponseBody., 和春天将方法的结果值视为HTTP响应主体本身。
想要查询更多的信息,这篇文章是一个很好的开始。
3.2。@ResponseStatus.
当端点成功返回时,Spring提供了HTTP 200(OK)响应。如果端点抛出异常,则Spring查找异常处理程序,以告诉您要使用的HTTP状态。
我们可以使用@ResponseStatus标记这些方法,因此春季返回自定义HTTP状态。
有关详细信息,请访问我们的文章金宝搏官网188be自定义状态代码。
3.3。直接操纵响应
春天也让我们访问javax.servlet.http.httpservletresponse.直接对象;我们只需要将其声明为方法参数:
@getmapping(“/手动”)void手册(httpservletresponse响应)抛出ioException {response.setheader(“custom-header”,“foo”);Response.setStatus(200);response.getWriter()。Println(“Hello World!”);}
由于Spring提供了抽象和高于底层实现的额外功能,我们不应该以这种方式操纵响应。
4。结论
在本文中,我们讨论了在Spring中操纵HTTP响应的多种方法,并检查了他们的好处和缺点。
像往常一样,可以使用示例在github上。