Как игнорировать корень списка при сериализации json / jackson? - PullRequest
0 голосов
/ 04 января 2012

У меня есть простой Бин, аннотированный @XmlRootElement:

@XmlRootElement
public class MyBean {
    private String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

У меня есть простой сервис Джерси, который представляет этот компонент и список этого компонента:

@Component
@Path("/myresource")
public class MyResource {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<MyBean> getAll() {
          //...
          return list;
    }

    @GET 
    @Path("{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public MyBean getById(@PathParam("id") long id) {
        //...
        return bean;
    }
}

Проблема в том, что когда я получаю список бинов, у меня появляется следующий json:

{"myBean":[{"name":"Hello"},{"name":"Plop"}]}

Что бы я хотел (без имени корневого списка):

{[{"name":"Hello"},{"name":"Plop"}]}

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

Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 06 января 2012

Спасибо за вашу помощь, но у меня был тот же результат с массивом.

Вместо этого я удалил аннотацию XmlRootElement на MyBean и добавил следующее в web.xml в объявлении сервлета:

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
0 голосов
/ 04 января 2012

AFAIK, если вы используете

MyBean[]

вместо ArrayList, вы получите именно то, что вы хотите!

...