代码之家  ›  专栏  ›  技术社区  ›  UndefinedUserAtSO

Quarkus无法将简单字符串序列化为JSON

  •  0
  • UndefinedUserAtSO  · 技术社区  · 1 年前

    我的Quarkus应用程序只有一个类,如下所示:

    package org.acme;
    
    import jakarta.ws.rs.GET;
    import jakarta.ws.rs.Path;
    import jakarta.ws.rs.Produces;
    import jakarta.ws.rs.core.MediaType;
    
    @Path("/hello")
    public class GreetingResource {
    
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public String hello(){
            return "Hello from Quarkus REST";
        }
    }
    

    预期的回应将是:

    200 OK HTTP/1.1
    Content-Type: application/json
    
    "Hello from Quarkus REST"
    

    相反,它返回:

    200 OK HTTP/1.1
    Content-Type: application/json
    
    Hello from Quarkus REST
    

    由于缺少引号,JSON无效,因此无法解析。

    知道为什么杰克逊不把我的 String JSON?

    这看起来很奇怪,因为 Content-Type header仍然指示响应是JSON。

    我在Quarkus网站上找不到任何记录这种行为的东西。

    0 回复  |  直到 1 年前
        1
  •  0
  •   ozkanpakdil Mark Heath    1 年前

    你回来了 String 在这里,预期的“双引号”是序列化器的json功能所没有的。因为该代码并没有真正进行序列化,所以如果你返回一个对象,你会得到var值和名称周围的双引号。例子 here .

    对于您的情况,您需要按照以下方式返回。

        @Produces(MediaType.APPLICATION_JSON)
        public String hello(){
            return "\"Hello from Quarkus REST\"";
        }
    

    还有其他方法 https://stackoverflow.com/a/62584128/175554