2015-09-28 86 views
1

我想反序列化一个使用gson.fromJson的postman发送的对象。无法用gson.fromJson反序列化对象

@POST 
    @Path("company") // takes name as a path parameter 
    @Produces("application/json") // response formatted as JSON 
    public Response insertCompany(String content) { 
     Gson gson = new Gson(); 
     CompanyWithNoIdReturn newCompany = gson.fromJson(content, CompanyWithNoIdReturn.class); 
    } 

public class CompanyWithNoIdReturn { 

    private final String name; 
    private final String description; 
    private final String logo; 

    public CompanyWithNoIdReturn(String name, String description, String logo) 
    { 
     this.name = name; 
     this.description = description; 
     this.logo = logo; 
    } 

    public String getName() { 

     return name; 
    } 

    public String getDescription() { 

     return description; 
    } 

    public String getLogo() { 

     return logo; 
    } 

} 

,来了的错误是:javax.servlet.ServletException:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:预期BEGIN_OBJECT但STRING 第1行塔1

我明白,这意味着,它期望在here提到开始与{和不" 。虽然我不明白的是我该如何解决它?

JSON的是池莉构建这样的:enter image description here

编辑:在使用形式 - 数据内容是这样的:

content = (java.lang.String) "------WebKitFormBoundaryUG5yy1gW9G2V5qcz 
Content-Disposition: form-data; name="CompanyName" 

newCompanyName2 
------WebKitFormBoundaryUG5yy1gW9G2V5qcz 
Content-Disposition: form-data; name="Description" 

newDescription2 
------WebKitFormBoundaryUG5yy1gW9G2V5qcz 
Content-Disposition: form-data; name="logo" 

newLogo2 
------WebKitFormBoundaryUG5yy1gW9G2V5qcz-- 
" 
+0

您的输入JSON在哪里? – Amila

+0

@阿米拉我已经添加了邮差的图像\ –

回答

0

我想你想到JSON格式的主体(内容变量)。但根据你的邮递员你的形象发送form-data。如果你想用一个JAXRS服务来处理表单数据,你应该看看@FormParam

{ 
    "name": "Company name", 
    "description": "Company description", 
    "logo": "logo" 
} 
+0

你是对的。它工作正常。尽管如果我希望它能与form - data或xxx-www-form-urlencoded一起工作,那么这怎么可能呢? –

+0

如果你正在使用框架,它可以查看documetation。它应该有它的类。但我不知道你在用什么,也不能推荐任何东西。但是对于'form-data',你的'content'应该类似于“name = a&description = b&logo = c”,你可以使用'String'类来解析它。 –

+0

我没有使用任何框架,虽然我不明白。如果我在最初的问题中使用代码,它会产生一个错误,因为它期望对象不是字符串。你能写出处理数据的代码吗?正如我在第一个问题中写的那样? –

0

尝试切换到raw和插入此。您的服务将变为

@POST 
@Path("company") // takes name as a path parameter 
@Produces("application/json") // response formatted as JSON 
public Response insertCompany(@FormParam("CompanyName") String name, @FormParam("Description") String description, @FormParam("Logo") String logo)) { 
    CompanyWithNoIdReturn newCompany = new CompanyWithNoIdReturn(name, description, logo); 
    return Response.ok(newCompany).build(); 
} 

您必须确保在FormParam注释中指定的名称与表单中的字段名匹配。