我是新手使用JAX-RS并编写了一个输出json对象的示例应用程序.但我得到一个例外.这是我的代码:
@Path("/hello")
public class HelloWorldService {
    @GET
    @Path("/query/{artist_id}")
    @Produces("application/json")
    public Data getMsg(@PathParam("artist_id") int artist_id,
                            @QueryParam("from") int from,
                            @QueryParam("to") int to) {
        Data d=new Data();
        d.setName("Mateen");
        d.setRoll(77);
        return d;
    }
}
我的数据只是一个POJO类:
@XmlRootElement
public class Data {
    private int roll;
    private String name;
    public int getRoll() {
        return roll;
    }
    public void setRoll(int roll) {
        this.roll = roll;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
我得到一个例外:
javax.ws.rs.WebApplicationException: 
    com.sun.jersey.api.MessageException: 
    A message …在试图弄清楚我的问题后,我终于决定问你如何解决我的问题.我见过不同的人有同样的问题,我尝试了他们所建议做的所有事情,但没有任何帮助我的问题.所以基本上我有一个使用Jersey构建的RESTful服务.对于我的客户端,我想以JSON格式返回一个对象.我阅读了不同的教程,并认为使用jersey-json-1.8库是有意义的.我说的一切我的项目像往常一样,并试图运行它,但我打电话给服务每次(通过GET请求大气压)我收到HTTP错误代码500(内部服务器错误),我的服务器响应,没有邮件正文可以找到作家.如果我正在返回XML,它的工作正常,一切都很棒.我也试过复制jersey-json-1.8.jar到我的Tomcat lib文件夹,因为我必须使用我正在使用的mysql lib这样做,但它也没有帮助.如果你能帮我解决这个问题,我会很高兴的!如果您需要更多信息,请留下评论,我会尽可能快地提供它:)
我的项目设置是:3个不同的包1.我的RESTfulServices 2.我的Java工作,我处理SQL连接等.3.一个包,我存储我需要使用的所有模型,我想以JSON格式返回(在我的例子中为testdrive的路由)
Tomcat Webserver IDE:Eclipse我正在使用Maven
无论我试图返回对象的内容或方式,它都无法正常工作,我不断收到错误消息:
Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class com.mykong.models.Teststrecke, and Java type class com.mykong.models.Teststrecke, and MIME media type application/json was not found
编辑:这是我的JSON服务方法
@Path("/hellojson")
public class JSONService {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public ArrayList<Route> getJSONMsg()  
    {
        Route ts = new Route();
        ts.setId(1);
        ts.setName("HelloWorld");
        Route ts2 = new Route();
        ts2.setId(2);
        ts2.setName("HelloWorld");
        ArrayList<Route> availRoutes = new ArrayList<Route>();
        availRoutes.add(ts);
        availRoutes.add(ts2);
        return availRoutes;
    }
}
我正在使用jms/atmosphere框架在两个应用程序之间进行通信.其中一个应用程序是主题的消息生成器,发送以下类型的自定义对象:
    @XmlRootElement
    public class A implements Serializable{
    public A(){}
    /* some private properties */
   }
另一方面,不止一个消费者正在监听该主题并根据ID进行不同的订阅.
    @GET
    @Produces({MediaType.APPLICATION_JSON})
    public SuspendResponse<A> subscribe() {
    return new SuspendResponse.SuspendResponseBuilder<A>()
            .broadcaster(topic)
            .outputComments(true)
            .addListener(new EventsLogger()).build();
    } 
   @Override
public void incomingBroadcast() {
    try {
        String id = getID();
        if (id.startsWith("/*")) {
            id = "atmosphere";
        }
        logger.info("Looking up Connection Factory {}", FACTORY_NAME);
        Context ctx = new InitialContext();
        ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup(FACTORY_NAME);
        logger.info("Looking up topic: {}", TOPIC_NAME);
        Topic topic = (Topic) ctx.lookup(TOPIC_NAME);
        connection = connectionFactory.createConnection();
        session = connection.createSession(false, …我的应用程序使用REST(JAX-RS Jersey)接口.当我在Eclipse中运行它时,一切都很好.域对象是注释的,我没有使用XML文件进行REST映射.
现在我使用maven-assembly-plugin创建了一个独立的JAR,它将应用程序和所有依赖项打包在一个可执行的JAR文件中.这似乎也有效.
但是当我启动应用程序并从服务器请求一个对象时,Jersey抱怨说它无法找到一个消息正文阅读器:
com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java type, class de.rybu.atuin.core.entity.User, and MIME media type, application/json, was not found
任何想法为什么会这样?
编辑:我睡了一个晚上后,我发现它抱怨JSON ......但我只使用XML进行序列化.奇怪.
本网站已经有了这个问题的正确答案.问题是问题是针对泽西岛1.6,泽西岛1.17.1的正确答案是埋在底部.我想我会为这个答案创建一个正确的问题,这样就可以更容易地为那些在这方面苦苦挣扎的人找到帮助(就像我一样).