• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Joanna Qian
Stay Hungry, Stay Foolish!
博客园    首页    新随笔    联系   管理    订阅  订阅
《Play for Java》学习笔记(七)数据类型解析——Body parser

一、什么是body parser?

body parser(不知道具体如何翻译,~~~~(>_<)~~~~ )指一个HTTP请求 (如POST和PUT操作)所包含的文本内容(body),这个body就HTTP response中的Content-Type header,该body可能是XML、JSON、二进制码(binary data)、文本或其他Content-type类型,而body parser的功能就是将这一请求body转换为JAVA。 其解析过程见下图:

说明:

  • 不能直接直接JAVA来写BodyParser,因为Play的BodyParser必须用Iteratee[Array[Byte]来处理动态的body content,JAVA是静态语言,所以只能使用Scala来写BodyParser
  • 所幸的是Play已经提供了一些常用的BodyParser API,如解析JSON、XML、Text、上传文件等,我们可以在JAVA中直接使用这些API

二、body-parser API

在Java BodyParser API中,所有的body parsers必须生成play.mvc.Http.RequestBody值,该值通过a request().body()返回获得

还可以是使用@BodyParser.注解进行部分的body parser,如我们可以通过body.asJson() 得到一个JSON body

 

内置的body parser: AnyContent

text/plain String accessible via asText()
application/json JsonNode accessible via asJson()
text/xml org.w3c.Document accessible via asXml()
application/form-URL-encoded Map<String, String[]> asFormUrlEncoded()
multipart/form-data Http.MultipartFormData accessible via asMultipartFormData()
Any other content type Http.RawBuffer accessible via asRaw()
说明: 如果请求的body type不可行,这些方法返回的是null
pulic 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的最大尺寸——Max content length

基于文本类型的body parsers (如text, json, xml或formUrlEncoded)可以使用最大的content length,因为它们得将内容装载入内存。

content length的默认大小是100KB,可以在application.conf中设置默认值,如下代码

    parsers.text.maxLength=128K

还可以通过@BodyParser.Of注解来定义其大小:

// Accept only 10KB of data.
@BodyParser.Of(value = BodyParser.Text.class, maxLength = 10 * 1024)
pulic static Result index() {
  if(request().body().isMaxSizeExceeded()) {
    return badRequest("Too much data!");
  } else {
    ok("Got body: " + request().body().asText()); 
  }
}

参考:http://www.playframework.com/documentation/2.0/JavaBodyParsers

posted on 2014-04-08 03:53  Joanna Qian  阅读(841)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3