2015-05-08 3 views
0

У меня есть пример сервера Джерси, который отлично работает с XML, но не работает с JSON.JSON-Request to Jersey вызывает «400 Bad Request»

import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.MediaType; 
import javax.xml.bind.annotation.XmlRootElement; 

@Path("JsonExample") 
public class JsonExample { 

    @XmlRootElement 
    public static class Input { 
     public String text; 
    } 

    @POST 
    @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
    public String test(Input i) { 
     return i.text; 
    } 

} 

Если я отправить этот запрос XML в качестве application/xml на сервер, все работает отлично, ответ a (для http://localhost:8080/App/rest/JsonExample в POST)

<input><text>a</text></input> 

Я перевел его в формат JSON в utilities-online.info и послал его как application/json по тому же адресу, с теми же параметрами, но получил ошибку «400 Bad Request»

{ 
    "input": { "text": "a" } 
} 

Окружающая среда:

  • Tomcat 7
  • джерси 2,17

Что я пробовал:

  • добавил org.codehaus.jackson.jaxrs к jersey.config.server.provider.packages Init-парам
  • включен Init-парам com.sun.jersey.api.json.POJOMappingFeature как true
  • добавлена ​​зависимость com.sun.jersey/jersey-json/1.8

ответ

1

При написании мой вопрос, который я видел исключение, что «вход» не ожидается, как поле. Правильный запрос JSON должен быть:

{ "text": "a" }