Использование Джексона для анализа multipart / form-data или application / json - PullRequest
3 голосов
/ 23 декабря 2011

Я использую CXF с JacksonJsonProvider для моих REST-сервисов.У меня есть метод тестирования следующим образом

@POST
@Path("/book/{id}")
@Consumes({"application/json, multipart/form-data, application/x-www-urlencoded"})
@Produces({"application/json"})
public boolean setOwner(Book book) {
    System.out.println(book.getName());
    return true;
}

Теперь, если я сделаю запрос POST с необработанной строкой JSON следующим образом

    {"Book":{"name":"Book name","publisher":"Book publisher"}}

Запрос обрабатывается правильно, так как я использую Content-Typeкак 'application / json' при выполнении запроса.

Но поскольку я интегрируюсь с внешним сервисом, я получаю либо multipart / form-data ИЛИ application / x-www-urlencoded, для которых нет ничего похожегоДжексон, который может справиться с этим.Если кто-то может указать мне правильное направление, это было бы здорово.

Я могу управлять данными multipart / form с помощью Jettison (часть CXF), но я бы хотел использовать Джексона.

1 Ответ

0 голосов
/ 18 декабря 2013

Я хотел сделать то же самое, почти годы спустя! Мне не очень повезло, используя один метод для обработки нескольких раз MIME, но я заставил его работать, используя два метода, например:

@POST
@Path("/book/{id}")
@Consumes({"multipart/form-data"})
@Produces({"application/json"})
public boolean setOwnerFromUpload(@FormDataParam("file") InputStream inputStream) {
    // decode
    final ObjectMapper mapper = new ObjectMapper();
    final Book book = (Book) mapper.readValue(inputStream, Book.class);
    System.out.println(book.getName());
    return true;
}

С помощью двух методов Джексон теперь может обрабатывать два разных типа пантомимы.

...