本文介绍了javax.ws.rs.WebApplicationException:com.sun.jersey.api.MessageException:带有Jersey的Java REST Webservices中的JSON支持的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,这个问题以前可能已经被问过了,但是在所有站点上,我都看过如何做到这一点"的解释,告诉我我做对了.

Okay, this question has probably been asked before, but on all sites I've looked the explanation on "how to do this" tells me I'm doing it completely right.

我知道我不是,因为我在本地主机tomcat上收到500个服务器错误,并且在我的服务器日志中收到以下错误:

I know I'm not, as I get a 500 server error on my localhost tomcat and I get the following error in my server logs:

javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class com.myapp.domain.Location, and Java type class com.myapp.domain.Location, and MIME media type application/json was not found

因此,我要尝试的是使用Jersey(在Java中)开发RESTful Web服务.除我要返回JSON的事实外,其他一切都很好.我找不到与这些人不同的工作

So, what I'm trying to do is to develop a RESTful web service with Jersey (in Java). Everything is going fine, except for the fact that I want to return JSON. I can't find what I'm doing different from these people:

  • How to send response as JSON in Jersey Rest
  • http://www.jasonwhaley.com/blog/2011/01/18/multiple-content-types-in-jax-rs/
  • https://github.com/jasonray/jersey-starterkit/wiki/Serializing-a-POJO-to-xml-or-json-using-JAXB
  • https://github.com/jasonray/jersey-starterkit/wiki/Serializing-a-POJO-to-json-using-built-in-jersey-support
  • http://www.vogella.com/tutorials/REST/article.html

我的POJO(位置)如下:

My POJO (Location) looks like this:

package com.myapp.domain;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement()
public class Location {
    private int id;
    private double longtitude;
    private double latitude;

    public Location() {
        new Location(-1, -1, -1);
    }

    public Location(double longtitude, double latitude) {
        new Location(-1, longtitude, latitude);
    }

    public Location(int id, double longtitude, double latitude) {
        this.id = id;
        this.longtitude = longtitude;
        this.latitude = latitude;
    }

    public void setID(int id) {
        this.id = id;
    }

    public void setLongtitude(double longtitude) {
        this.longtitude = longtitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public int getID() {
        return this.id;
    }

    public double getLongtitude() {
        return this.longtitude;
    }

    public double getLatitude() {
        return this.latitude;
    }
}

我的资源如下:

package com.myapp.MyAPP;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.myapp.domain.Location;

@Path("Locations")
public class LocationInfo {
    @GET
    @Path("/get/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Location getLocation(@PathParam("id") int id) {
        Location loc = new Location(3, 4.007391, 51.00237);
        return loc;
    }
}

这是我的web.xml:

And this is my web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" 
        version="2.5">  
    <display-name>MyAPP</display-name> 
    <servlet> 
            <servlet-name>MyAPP REST Service</servlet-name> 
            <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
            <init-param> 
                <param-name>com.sun.jersey.config.property.packages</param-name> 
                <param-value>com.myapp.MyAPP</param-value>
            </init-param>
            <init-param>
                <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
                <param-value>true</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
            <servlet-name>MyAPP REST Service</servlet-name> 
            <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping>
</web-app>

我已经包含了以下库:asm-3.1.jarjersey-client-1.17.1.jarjersey-core-1.17.1.jarjersey-json-1.17.1.jarjersey-server-1.17.1.jarjersey-servlet-1.17.jarjsr11-api-1.1.1.jar

I've got these libraries included: asm-3.1.jar, jersey-client-1.17.1.jar, jersey-core-1.17.1.jar, jersey-json-1.17.1.jar, jersey-server-1.17.1.jar, jersey-servlet-1.17.jar, jsr11-api-1.1.1.jar

看到我没看到的东西的人会喝啤酒.或至少是我永恒的感激之情,因为我已经看了太久了,但仍然看不到.

The one who sees what I'm not seeing gets a beer. Or at least my eternal gratitude, cause I've been looking at this for way too long and I still can't see it.

推荐答案

好的,所以我发现orid有正确的答案:我只需要添加一些额外的库!

Okay, so I turned out orid had the right answer: I simply needed to add some extra libraries!

我可能忽略了它,或者大多数教程可能都假设您立即添加了使用jersey下载的所有库...

I probably overlooked it or most tutorials probably suppose you add all the libraries you download with jersey straight away...

所以这解决了问题:添加

So this fixed the problem: adding

  • jackson-core-asl-1.9.2.jar
  • jackson-jaxrs-1.9.2.jar
  • jackson-mapper-asl-1.9.2.jar
  • jackson-xc-1.9.2.jar
  • jackson-core-asl-1.9.2.jar
  • jackson-jaxrs-1.9.2.jar
  • jackson-mapper-asl-1.9.2.jar
  • jackson-xc-1.9.2.jar

再次感谢orid,您刚刚保存了我的周末.

Thanks again to orid, you just saved my weekend.

这篇关于javax.ws.rs.WebApplicationException:com.sun.jersey.api.MessageException:带有Jersey的Java REST Webservices中的JSON支持的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-22 20:36