Play(Scala)中AuthenticatedBuilder的defaultBodyParser参数获取咨询
解决Play框架AuthenticatedBuilder的defaultBodyParser参数问题
我来帮你搞定这个问题!你遇到的报错是因为Play的AuthenticatedBuilder构造函数必须明确传入defaultBodyParser参数——这个参数是用来指定处理请求体的默认解析器的,Play不会自动帮你选,得咱们自己指定。下面给你几种常用的解决方案:
1. 使用通用默认解析器(推荐)
Play内置了BodyParsers.parse.anyContent,这是最通用的解析器,它会根据请求的Content-Type自动适配解析逻辑(比如JSON、表单数据、文本等都能处理),返回AnyContent类型,适合大多数场景。代码示例:
import play.api.mvc.BodyParsers object Authenticated extends AuthenticatedBuilder[User]( _.headers.get("test").flatMap(auth), defaultBodyParser = BodyParsers.parse.anyContent )
2. 指定特定类型的解析器
如果你的接口主要处理某一种类型的请求(比如JSON接口),可以直接用对应类型的内置解析器,比如JSON解析器:
import play.api.mvc.BodyParsers object Authenticated extends AuthenticatedBuilder[User]( _.headers.get("test").flatMap(auth), defaultBodyParser = BodyParsers.parse.json )
类似的,你还可以用BodyParsers.parse.xml处理XML请求,BodyParsers.parse.formUrlEncoded处理表单请求。
3. 自定义解析器
如果内置解析器满足不了需求,你也可以自己实现BodyParser。比如只解析纯文本请求:
import play.api.mvc.BodyParsers val textOnlyParser: BodyParser[String] = BodyParsers.parse.text object Authenticated extends AuthenticatedBuilder[User]( _.headers.get("test").flatMap(auth), defaultBodyParser = textOnlyParser )
另外补充一点:这个defaultBodyParser只是全局默认值,后续在具体的action里,你还可以单独指定解析器来覆盖它,比如:
def jsonOnlyAction = Authenticated { authRequest => Action(parse.json) { request => Ok("处理JSON请求") } }
内容的提问来源于stack exchange,提问作者John Anderson
相关产品推荐
相关产品推荐

