【问题标题】:java rest returning response with json to postman - syntax error: unexpected 'S'java rest用json向邮递员返回响应-语法错误:意外的'S'
【发布时间】:2019-03-20 22:41:16
【问题描述】:

使用邮递员时,我收到以下错误

语法错误:意外的“S”

即使我的 JSON 字符串看起来不错。我看过类似的主题,通常说给响应对象一个可以正确转换为 JSON 的实体。我已经用 GSON 解析了一个宠物列表。

代码:

@Path("Pet")
public class PetResource {

    @Context
    private UriInfo context;

    public PetResource() {
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getJson() {
        PetMapper pm = new PetMapper();
        JSONConverter jsonconv = new JSONConverter();
        List<Pet> petList = pm.getPets();
        String json = jsonconv.getJsonFromPets(petList);
        return Response.ok().entity(json).build();
    }

    @PUT
    @Path("/size")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getPetSize() {
        PetMapper pm = new PetMapper();
        return Response.ok(pm.getPetSize()).build();
    }
}

GSon 转换器

public class JSONConverter {

    static Gson gson = new GsonBuilder().setPrettyPrinting().create();

public String getJsonFromPets(List<Pet> pets) {
    String petsString = "";
    for (Pet pet : pets) {
        petsString += gson.toJson(pet) + " ";
    }
    return petsString;
}
}

以下是我的原始回复

{
  "id": 1,
  "name": "Fiddo",
  "birth": "2015-02-01",
  "species": "Dog",
  "owner_id": 1,
  "events": []
} {
  "id": 2,
  "name": "Hannibal",
  "birth": "2013-05-10",
  "species": "Dog",
  "owner_id": 1,
  "events": []
} {
  "id": 3,
  "name": "Elvis",
  "birth": "2010-08-08",
  "species": "Cat",
  "owner_id": 3,
  "events": []
} {
  "id": 4,
  "name": "Sam",
  "birth": "2012-01-05",
  "species": "Rabbit",
  "death": "2015-07-07",
  "owner_id": 2,
  "events": []
} 

【问题讨论】:

  • 这意味着您的回复未按预期发送。框架中可能存在异常,导致一些错误内容被向下发送。你能检查一下“原始”响应的样子吗?
  • 我已经编辑了我的问题,底部的 json 是原始响应 :)
  • 哦,是的,它不是有效的 JSON。它是多个未包含在父对象(对象或数组)中的对象,它们甚至没有用逗号分隔。

标签: java json rest postman


【解决方案1】:

您的输出文本不是有效的 JSON。问题在于列表的序列化方式。

我相信给你的 JSON 库提供整个列表就足够了:

public String getJsonFromPets(List<Pet> pets) {
    return gson.toJson(pets);
}

【讨论】:

  • 我会在 5 分钟内接受作为答案,感谢您的宝贵时间。它有效:)
  • @JonasGrønbek 最好的答案可能还在路上:-),慢慢来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 2017-03-02
  • 2023-03-03
  • 2020-09-12
  • 1970-01-01
相关资源
最近更新 更多