我是新手使用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;
}
Run Code Online (Sandbox Code Playgroud)
}
我的数据只是一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
javax.ws.rs.WebApplicationException:
com.sun.jersey.api.MessageException:
A message …Run Code Online (Sandbox Code Playgroud) 在试图弄清楚我的问题后,我终于决定问你如何解决我的问题.我见过不同的人有同样的问题,我尝试了他们所建议做的所有事情,但没有任何帮助我的问题.所以基本上我有一个使用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
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的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;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用jms/atmosphere框架在两个应用程序之间进行通信.其中一个应用程序是主题的消息生成器,发送以下类型的自定义对象:
@XmlRootElement
public class A implements Serializable{
public A(){}
/* some private properties */
}
Run Code Online (Sandbox Code Playgroud)
另一方面,不止一个消费者正在监听该主题并根据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, …Run Code Online (Sandbox Code Playgroud) 我的应用程序使用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
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样?
编辑:我睡了一个晚上后,我发现它抱怨JSON ......但我只使用XML进行序列化.奇怪.
本网站已经有了这个问题的正确答案.问题是问题是针对泽西岛1.6,泽西岛1.17.1的正确答案是埋在底部.我想我会为这个答案创建一个正确的问题,这样就可以更容易地为那些在这方面苦苦挣扎的人找到帮助(就像我一样).