Play framework Body分析器
来源:互联网 发布:Js 中isinfinite 编辑:程序博客网 时间:2024/05/22 12:12
什么叫做body分析器?
一个HTTP请求(至少对于使用POST或者PUT的操作)包含一个body,这个body可以被格式化为任何指定在Content-type头指定的格式,一个JAVA解析器转换这个请求的body为Java结果值。
注意:你不能写BodyParser
直接使用JAVA来实现,因为一个Play BodyParser
必须处理body内容使用 Iteratee[Array[Byte], A],它必须用Scala实现。
然而Play提供了一个默认的
BodyParser
s这应该适合大多数用例(转换json、xml、text、upload files),并且你可以重用哪些分析器,在Java中你可以使用这些默认的解析器来创建,例如你可以创建一个RDF分析器基于text。
BodyParser
的Java API
在Java的API,所有的body解析器必须产生一个play.mvc.Http.RequestBody的值,这个值是被body解析器计算然后可以通过request().body()
检索;
public static Result index() { RequestBody body = request().body(); return ok("Got body: " + body);}
你可以指定BodyParser 来指定特定的动作来使用@BodyParser.Of注解。
@BodyParser.Of(BodyParser.Json.class)public static Result index() { RequestBody body = request().body(); return ok("Got json: " + body.asJson());}
就像我们刚才所说的所有的java API body解析器将会给你一个play.mvc.Http.RequestBody值,从这个body对象你可以检索请求body内容最合适的Java类型。
注意:如果这个解析器被用作解析它所不支持的Content-type,这个RequestBody方法像
asText()
or asJson()
将会返回null,例如在一个action方法上使用@BodyParser.Of(BodyParser.Json.class)注释,调用asXml()方法将会返回null.
一些分析器能够指定特定的类型而不是Http.RequestBody,你可以自动的将请求主题转换成另外一种类型使用as(...)方法。
@BodyParser.Of(BodyLengthParser.class)public static Result index() { BodyLength body = request().body().as(BodyLength.class); ok("Request body length: " + body.getLength());}
默认分析器
如果你没有指定你的body分析器,Play将会使用默认的最适合的Content-type从content-type上
text/plain:
String
, accessible viaasText()
application/json:
JsonNode
, accessible viaasJson()
application/xml, text/xml or application/XXX+xml:
org.w3c.Document
, accessible viaasXml()
application/form-url-encoded:
Map<String, String[]>
, accessible viaasFormUrlEncoded()
multipart/form-data:
Http.MultipartFormData
, accessible viaasMultipartFormData()
Any other content type:
Http.RawBuffer
, accessible viaasRaw()
public static Result save() { RequestBody body = request().body(); String textBody = body.asText(); if(textBody != null) { ok("Got: " + text); } else { badRequest("Expecting text/plain request body"); }}
最大的Content长度
基于文本的分析器(例如json、xml、text、formUrlEncoded)有一个最大的文本长度,因为它们必须将所有内容加载到内存中。
提示:默认的content大小可以定义在application.conf
parsers.text.maxLength=128K
你也可以使用@BodyParser.Of注释指定content大小
// Accept only 10KB of data.@BodyParser.Of(value = BodyParser.Text.class, maxLength = 10 * 1024)public static Result index() { if(request().body().isMaxSizeExceeded()) { return badRequest("Too much data!"); } else { ok("Got body: " + request().body().asText()); }}
- Play framework Body分析器
- [Play Framework]Body parsers——请求主体解析器
- play framework
- play framework
- play framework
- Play Framework
- play framework
- play framework
- play Framework play json
- Play Framework (一)
- play framework学习笔记
- Play Framework Hibernate
- play Framework 配置
- play framework mysql
- Play framework简介
- Play Framework总结性介绍
- Play Framework配置Mysql
- play framework教程
- C语言创建单向链表之正向建链
- SPOJ DQUERY 练习赛 (主席树数组模板)
- codevs2173忠诚(st表)
- 初步接触Hadoop
- hdu3333-Turing Tree 线段树+离散化
- Play framework Body分析器
- ffmpeg参数中文详细解释
- 斜杠/和反斜杠\的区别
- iOS实现断点续传
- HDU 4512
- Youtube 视频自动播放
- Android06-常用控件(ImageView-ProgressBar-Handler)
- CentOS7安装并配置PostgreSQL
- 【bzoj2770】YY的Treap