首页 > 解决方案 > 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.getParameterctx.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...

标签: javaspringwebjavalin

解决方案


看起来您使用的是旧版本的 Kotlin,您应该升级到 1.3.X。


推荐阅读