MessageMessageBodywriter找不到媒体类型= application/xml,type = class java.util.arraylist
我正在尝试使用JAXRS执行非常简单的REST API。我一直在关注JetBrains教程,并且陷入了API需要返回reponses/XML的点。这里使用的Java版本为1.8,Tomcat为10.0。
我想缺少一些依赖性。有人可以帮忙吗?
这是我的代码片段: pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.surender</groupId>
<artifactId>messenger</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>messenger</name>
<build>
<finalName>messenger</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<inherited>true</inherited>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0-b170127.1453</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<!-- use the following artifactId if you don't need servlet 2.x compatibility -->
<!-- artifactId>jersey-container-servlet</artifactId -->
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-jaxb</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>4.0.0</version>
<scope>runtime</scope>
</dependency>
<!-- uncomment this to get JSON support <dependency> <groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-binding</artifactId> </dependency> -->
</dependencies>
<properties>
<jersey.version>3.1.0-M2</jersey.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
模型类
package org.surender.model;
import javax.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlElement;
@XmlRootElement(name = "Surender")
public class MessagesModel {
@XmlElement(name = "Message ID")
public int messageId;
public String messageTxt;
public String messageLike;
public String messageComment;
public MessagesModel(int messageId, String messageTxt, String messageLike, String messageComment) {
super();
System.out.println("Objects getting created");
this.messageId = messageId;
this.messageTxt = messageTxt;
this.messageLike = messageLike;
this.messageComment = messageComment;
}
public MessagesModel() {
}
public int getMessageId() {
return messageId;
}
public void setMessageId(int messageId) {
this.messageId = messageId;
}
public String getMessageTxt() {
return messageTxt;
}
public void setMessageTxt(String messageTxt) {
this.messageTxt = messageTxt;
}
public String getMessageLike() {
return messageLike;
}
public void setMessageLike(String messageLike) {
this.messageLike = messageLike;
}
public String getMessageComment() {
return messageComment;
}
public void setMessageComment(String messageComment) {
this.messageComment = messageComment;
}
}
消息服务
package org.surender.service;
import java.util.ArrayList;
import java.util.List;
import org.surender.model.MessagesModel;
public class MessagesService {
public List<MessagesModel> getMessages() {
List<MessagesModel> messagesList = new ArrayList<MessagesModel>();
messagesList.add(new MessagesModel(1,"Hey There !","2","Hello"));
messagesList.add(new MessagesModel(1,"Hola Amigo!","2","Hello"));
return messagesList;
}
public MessagesService() {
}
}
Messageresource
package org.surender.messenger;
import java.util.ArrayList;
import java.util.List;
import org.surender.model.MessagesModel;
import org.surender.service.MessagesService;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.GenericEntity;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@Path("messages")
public class Messages {
MessagesService msgService = new MessagesService();
@GET
@Produces(MediaType.APPLICATION_XML)
public Response getMessages() {
System.out.println("Hi... I'm here one");
GenericEntity<List<MessagesModel>> entity = new GenericEntity<List<MessagesModel>>(msgService.getMessages()) {};
return Response.ok(entity).build();
}
}
I am trying to execute a very simple REST API using JAXrs. I have been following JetBrains tutorial and I'm stuck at the point where the API needs to return Reponse/XML. The java version used here is 1.8 and the Tomcat is 10.0.
I Guess there is some dependencies missing. Can someone help?
Here are my code snippets:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.surender</groupId>
<artifactId>messenger</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>messenger</name>
<build>
<finalName>messenger</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<inherited>true</inherited>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0-b170127.1453</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<!-- use the following artifactId if you don't need servlet 2.x compatibility -->
<!-- artifactId>jersey-container-servlet</artifactId -->
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-jaxb</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>4.0.0</version>
<scope>runtime</scope>
</dependency>
<!-- uncomment this to get JSON support <dependency> <groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-binding</artifactId> </dependency> -->
</dependencies>
<properties>
<jersey.version>3.1.0-M2</jersey.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
Model Class
package org.surender.model;
import javax.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlElement;
@XmlRootElement(name = "Surender")
public class MessagesModel {
@XmlElement(name = "Message ID")
public int messageId;
public String messageTxt;
public String messageLike;
public String messageComment;
public MessagesModel(int messageId, String messageTxt, String messageLike, String messageComment) {
super();
System.out.println("Objects getting created");
this.messageId = messageId;
this.messageTxt = messageTxt;
this.messageLike = messageLike;
this.messageComment = messageComment;
}
public MessagesModel() {
}
public int getMessageId() {
return messageId;
}
public void setMessageId(int messageId) {
this.messageId = messageId;
}
public String getMessageTxt() {
return messageTxt;
}
public void setMessageTxt(String messageTxt) {
this.messageTxt = messageTxt;
}
public String getMessageLike() {
return messageLike;
}
public void setMessageLike(String messageLike) {
this.messageLike = messageLike;
}
public String getMessageComment() {
return messageComment;
}
public void setMessageComment(String messageComment) {
this.messageComment = messageComment;
}
}
Message Service
package org.surender.service;
import java.util.ArrayList;
import java.util.List;
import org.surender.model.MessagesModel;
public class MessagesService {
public List<MessagesModel> getMessages() {
List<MessagesModel> messagesList = new ArrayList<MessagesModel>();
messagesList.add(new MessagesModel(1,"Hey There !","2","Hello"));
messagesList.add(new MessagesModel(1,"Hola Amigo!","2","Hello"));
return messagesList;
}
public MessagesService() {
}
}
MessageResource
package org.surender.messenger;
import java.util.ArrayList;
import java.util.List;
import org.surender.model.MessagesModel;
import org.surender.service.MessagesService;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.GenericEntity;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@Path("messages")
public class Messages {
MessagesService msgService = new MessagesService();
@GET
@Produces(MediaType.APPLICATION_XML)
public Response getMessages() {
System.out.println("Hi... I'm here one");
GenericEntity<List<MessagesModel>> entity = new GenericEntity<List<MessagesModel>>(msgService.getMessages()) {};
return Response.ok(entity).build();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论