首页 > 解决方案 > Rest api开发:出现错误:找不到媒体类型=应用程序/xml的MessageBodyWriter

问题描述

我是开发 REST api 的新手,并试图创建一个小的虚拟 REST API。我正在使用 8.5.X 版的 tomcat。Eclipse 版本:2019-12 (4.14.0)。下面是我的代码。 消息资源.java:

package org.vaibhavc.practice.microservice.messanger.resources;
import java.util.List;

import org.vaibhavc.practice.microservice.messanger.model.Message;
import org.vaibhavc.practice.microservice.messanger.service.MessageService;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.GenericEntity;


@Path("/messages")
public class MessageResource {
    MessageService messageService = new MessageService();

    @GET
    @Produces(MediaType.APPLICATION_XML)

    public Response getMessage() {
        List<Message> newMessage = messageService.getAllMessages();
        GenericEntity<List<Message>> list = new GenericEntity<List<Message>>(newMessage) {};
        return Response.ok(list).build();
        }
}

消息.java

package org.vaibhavc.practice.microservice.messanger.model;

import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Message { 
    private long id;
    private String message;
    private Date created;
    private String author;

    public Message(){

    }
    public Message(long id, String message, String author) {
        this.id = id;
        this.message = message;
        this.created = new Date();
        this.author = author;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public Date getCreated() {
        return created;
    }
    public void setCreated(Date created) {
        this.created = created;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }

}

消息服务.java

package org.vaibhavc.practice.microservice.messanger.service;

import java.util.ArrayList;
import java.util.List;

import org.vaibhavc.practice.microservice.messanger.model.Message;

public class MessageService {

    public List<Message> getAllMessages(){
        Message m1 = new Message(1L,"Hello world!","Vaibhav");
        Message m2 = new Message(2L,"Hello jersery!","Vaibhav"); 

        List<Message> list = new ArrayList<>();
        list.add(m1);
        list.add(m2);

        return list;
    }

}

代码构建和编译成功。当我尝试访问 url“ http://localhost:8080/messanger/webapi/messages ”时,我收到如下错误: 严重:找不到媒体类型 = 应用程序 / xml 的 MessageBodyWriter,类型 = 类 java.util.ArrayList, genericType=java.util.List。

知道我在这里缺少什么吗?

标签: apirestjersey

解决方案


请在您的类路径中添加 jersey-media-moxy 库并检查 Maven 代码片段

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.31</version>

推荐阅读