Почему писатель для медиа-приложения / JSON отсутствует - PullRequest
4 голосов
/ 03 сентября 2010

В основном у меня есть спокойный сервис (пост), который потребляет (application/json) и производит (application/json).Единственным параметром для этого сервиса является аннотированный Java-объект.

Я использую org.jboss.resteasy.client.ClientRequest для отправки запроса в сервис.Тем не менее, я получаю это исключение на стороне клиента и исключение:

не удалось найти устройство записи для типа содержимого application/json типа.

Значит ли это, что мне не хватает некоторых библиотечных фляг или мне приходится писать собственный писатель для application / json?

Я использую resteasy 1.1

Отметить

Ответы [ 3 ]

6 голосов
/ 05 апреля 2012

Раман правильный. Jettison является действительным вариантом. Вы также можете использовать Джексона. Если вы используете maven, это так же просто, как включить следующую зависимость в вашем pom:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson-provider</artifactId>
        <version>2.3.2.Final</version>
    </dependency>

В этот момент у вас не должно возникнуть проблем при написании кода, такого как:

    SomeBean query = new SomeBean("args")
    request.body("application/json", query);
    ClientResponse response = request.post();
2 голосов
/ 09 сентября 2010

на самом деле у меня была та же проблема, я решил ее, добавив провайдер jettison для типа application / json mime.Я не знаю, содержит ли Resteasy 1.1 провайдер Jettison, но версия 1.2 делает.Также, если вы используете jdk 1.6, вы должны исключить javax.xml.stream:stax-api jar-файл, иначе у вас возникнет проблема.

Вот пример:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@XmlRootElement(name="account")
public class Account {

    private Long id;
    private String accountNo;


    public Account(){}
    public Account(String no)   {
        accountNo=no;
    }


    @Id
    @XmlElement
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    @XmlElement
    public String getAccountNo() {
        return accountNo;
    }
    public void setAccountNo(String a) {
        accountNo = a;
    }

}

иКласс JAXB:

import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;


    @Path("/account")
    public class AccountService {


        @GET
        @Path("/{accountNo}")
        @Produces("application/json")
        public Account getAccount(@PathParam("accountNo") String accountNo) {
                   return new Account(accountNo);
        }

    }

Вот и все, хорошего дня!

1 голос
/ 29 ноября 2013

Добавьте ниже в класс Resource или метод, вызывающий исключение

@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
...