2014-10-31 2 views
0

Я последовал ответ вО том, как получать и отправлять запрос PUT с Джерси

Post/Put/Delete http Json with additional parameters in Jersey + general design issues

Но я продолжал получать 400 Bad Request ... Любая идея, как решить эту проблему?

Вот что у меня есть для джерси успокоительного сервера:

@PUT 
@Path("/insertmessage") 
@Consumes({ MediaType.APPLICATION_JSON }) 
@Produces({ MediaType.TEXT_PLAIN }) 
public Response insertMessage(Message m) { 
    return Response.ok(m.toString(), MediaType.TEXT_PLAIN).build(); 
} 

вот что я для клиента:

ClientConfig config = new DefaultClientConfig(); 
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); 
Client client = Client.create(config); 
WebResource service = client.resource(getBaseURI()); 
ObjectMapper mapper = new ObjectMapper(); 
String json = mapper.writeValueAsString(new Message("a", "b", "message")); 
System.out.print(service.path("insertmessage") 
     .type(MediaType.APPLICATION_JSON).put(String.class, json)); 

Вот конструктор сообщения:

@JsonCreator 
public Message(@JsonProperty("sender") String sender, 
       @JsonProperty("receiver") String receiver, 
       @JsonProperty("content") String content) { 
    this.sender = sender; 
    this.receiver = receiver; 
    this.content = content; 
} 

И у меня есть:

<init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
</init-param> 

в моей web.xml

ответ

0

Если вы используете Джерси 2.x вы можете использовать прокси-клиент, так что вы можете позвонить в службу, как будто это локальный класс.
Что касается вашего кода, неясно, что такое аннотирование и путь контроллера. Я говорю об этой части path ("rest").

+0

Мое приложение, это опечатка ... Я использую Джерси 1.18. Мой вопрос в том, как я могу отправить объект на сервер и как сервер получит этот объект. В настоящее время я использую Jackson для сериализации объекта, но он продолжает показывать мне ошибку 400 – wwood

+0

Если у вас установлен ** POJO_MAPPING **, вам не нужно явно отображать объекты. И вам даже не нужно комментировать класс сообщений. Учитывая ** getBaseURI() ** возвращает правильное значение, оно должно работать. Проверьте свой сервер с помощью завитка или другого клиента с ручным управлением. 400 означает, что у вас есть ошибка в самом HTTP-запросе, а не в json. И я рекомендую Jersey 2.x, поскольку 1.x беспорядочен. Вам не понадобятся все эти баггистые строковые литералы, ответное здание и т. Д. – Dmytro

+0

Под «вам не нужно явно отображать объекты», вы имеете в виду, что мне не нужно использовать Джексона для явного сериализации объекта, но вместо этого отправлять сам объект непосредственно? – wwood

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