2015-09-28 80 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註釋中指定的名稱與表單中的字段名匹配。