Javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: поддержка JSON в Java REST Webservices с Джерси

106
9

Хорошо, этот вопрос, вероятно, был задан раньше, но на всех сайтах я посмотрел объяснение на тему "как это сделать" говорит мне, что я делаю это совершенно правильно.


Я знаю, что нет, поскольку я получаю ошибку сервера 500 на моем localhost tomcat, и я получаю следующую ошибку в журналах сервера:


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

Итак, я пытаюсь создать веб-сервис RESTful с Джерси (на Java). Все идет хорошо, за исключением того, что я хочу вернуть JSON. Я не могу найти то, что я делаю, отличное от этих людей:


My POJO (Location) выглядит так:


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:


<?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.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


Тот, кто видит то, что я не вижу, получает пиво. Или, по крайней мере, моя вечная благодарность, потому что я слишком долго смотрел на это, и я все еще не вижу этого.

спросил(а) 2014-01-26T21:02:00+04:00 6 лет, 8 месяцев назад
1
Решение
90

Хорошо, так что я выяснил, что у orid был правильный ответ: мне просто нужно было добавить дополнительные библиотеки!


Я, вероятно, не обратил на это внимания, или большинство учебных пособий, вероятно, предполагают, что вы сразу же добавите все библиотеки, которые вы загружаете с помощью трикотажа...


Таким образом, исправлена ​​проблема: добавление

    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, вы просто сохранили мои выходные.

ответил(а) 2014-01-26T22:09:00+04:00 6 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема