java - Javalin,无法获取请求正文,除非直接从 HttpServlet
问题描述
我无法从 Javalin 的context
对象中获取请求正文,例如context.formParam
, context.body()
,context.bodyAsClass()
我试过这样,我可以得到请求正文,我HttpServletRequest
直接用来获取请求正文
public void addPerson(Context ctx){
Map<String, Object> map = new HashMap<>();
try {
String name = ctx.req.getParameter("person_name");
String address = ctx.req.getParameter("person_address");
personList.add(new Person(name,address));
map.put("status",200);
map.put("data","Success ");
ctx.json(map);
}catch (Exception ex){
map.put("status",500);
map.put("data","Fail");
ctx.status(500).json(map);
}
}
如果我更改ctx.req.getParameter
为ctx.formBody
服务器日志中将出现错误消息
Exception occurred while servicing http-request
java.lang.NoSuchMethodError: kotlin.io.ByteStreamsKt.readBytes(Ljava/io/InputStream;)[B
at io.javalin.http.CachedRequestWrapper$cachedBytes$2.invoke(CachedRequestWrapper.kt:21) ~[javalin-3.0.0.jar:na]
at io.javalin.http.CachedRequestWrapper$cachedBytes$2.invoke(CachedRequestWrapper.kt:16) ~[javalin-3.0.0.jar:na]
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) ~[kotlin-stdlib-1.2.71.jar:1.2.71-release-64 (1.2.71)]
at io.javalin.http.CachedRequestWrapper.getCachedBytes(CachedRequestWrapper.kt) ~[javalin-3.0.0.jar:na]
at io.javalin.http.CachedRequestWrapper.getInputStream(CachedRequestWrapper.kt:31) ~[javalin-3.0.0.jar:na]
at io.javalin.http.Context.bodyAsBytes(Context.kt:118) ~[javalin-3.0.0.jar:na]
at io.javalin.http.Context.body(Context.kt:108) ~[javalin-3.0.0.jar:na]
at...
解决方案
看起来您使用的是旧版本的 Kotlin,您应该升级到 1.3.X。
推荐阅读
- javascript - 如何将 python 变量的值(字符串)分配为 JavaScript 变量中的值
- c# - (AndroidX) 无法构建“AMM0000”-Xamarin.AndroidX.AppCompat.Resources
- python - 如何在使用 scipy.linalg.sqrtm() 计算正半定矩阵的平方根时抑制复数
- css - React Material UI 中的下拉菜单项
- c++ - QT 是否将 dynamic_cast 用于 QML 属性?
- visual-c++ - CMFCEditBrowseCtrl 正在裁剪文件名
- javascript - 错误 TS2532:对象可能是“未定义” - 使用“?”。操作员
- google-cloud-platform - 云构建pytest找不到Ghostscript库
- javascript - K6 如何在 setup 函数中运行 node 命令
- android - Android View Animation - 多个动画并行执行问题