2015-09-28 3 views
1

Я пытаюсь десериализовать отправку объекта почтовым сообщением с помощью gson.fromJson.Не удается десериализовать объект с помощью 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 был contructed так: enter image description here

EDIT: При использовании формы - данные содержание как:

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

@Amila Я добавил изображение почтальона \ –

ответ

0

Я думаю, что вы ожидаете тела (переменная контента) в формате JSON. Но, согласно вашему имиджу почтальона, вы отправляете form-data.

Попробуйте переключиться на raw и вставить этот:

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

Вы верны. Он работает нормально. Хотя если бы я хотел, чтобы он работал с формой - data или xxx-www-form-urlencoded, как это можно сделать? –

+0

Если вы используете фреймворк, вы можете взглянуть на документацию. У него должны быть классы для этого. Но я не знаю, что вы используете, и ничего не мог порекомендовать. Но в случае 'form-data' ваше' content' должно быть похоже на «name = a & description = b & logo = c», и вы можете проанализировать его с помощью класса String. –

+0

Я не использую никаких фреймворков, хотя я не понял. Если я использую код, как в моем первоначальном вопросе, он вызывает ошибку, потому что он ожидает, что объект не является строкой. Можете ли вы написать код обработки данных, как я написал в моем первоначальном вопросе? –

0

Если вы хотите обрабатывать данные формы со службой JaxRs, вы должны смотреть на @FormParam. Ваша служба станет

@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 соответствуют именам полей в форме.

Смежные вопросы