Джерси 2.x с использованием Pojo в качестве параметра для POST

У меня возникли проблемы с NPE при попытке использовать POJOS в качестве параметров. Я развертываю war maven, генерируемый на tomcat 7 с конфигурациями по умолчанию.

Сигнатура моего метода выглядит так.

@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
@Path("/do/")
public OtherPojo doSomething(MyPOJO pojo) {

Pojo аннотируется с помощью @XmlRootElement. Однако, когда я вызываю URL-адрес, pojo имеет значение null, и поэтому я получаю NPE. Мой пом.xml

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-metainf-services</artifactId>
  <version>${jersey.version}</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet</artifactId>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-json-jackson</artifactId>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>${jackson.version}</version>
</dependency>

Пробовал с джерси 2.13 и 2.6 и с джексоном 2.4

Кроме того, я не настраивал приложение, в моих классах просто есть аннотация

@Path("/somePath/")
public class SomeClass {

И это настроено в моем web.xml

    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.beer.routes</param-value>
    </init-param>

Я читал, что мне может понадобиться зарегистрировать JacksonFeature, но я не мог понять, как это сделать.


person Yonatan Abrego    schedule 06.11.2014    source источник


Ответы (1)


После дальнейшего просмотра приведенный выше код работает нормально. Проблема заключалась в том, что при вызове класса я отправлял полезную нагрузку с именами в нижнем регистре. POJO выглядит так

private String someString;

public void getSomeString() { ... }
public String setSomeString (String s) {...}

Проблема в моей полезной нагрузке заключалась в том, что я отправлял «someString» вместо «SomeString». Это очень актуально, так как это было причиной того, что мой объект был получен как нулевой.

После изменения полезной нагрузки ошибка изменилась на эту. Джексон с JSON: нераспознанное поле, не помеченное как игнорируемое

person Yonatan Abrego    schedule 07.11.2014