简体   繁体   English

Maven, Jersey, JSON, Tomcat, 找不到媒体类型=application/json 的错误 MessageBodyWriter

[英]Maven, Jersey, JSON, Tomcat, Error MessageBodyWriter not found for media type=application/json

I get this error when I try to see JSON response in my browser.当我尝试在浏览器中查看 JSON 响应时出现此错误。 I read a lot of posts on stack witch are similar but nothing work.我读了很多关于堆栈女巫的帖子都是相似的,但没有任何效果。 Browser return "Error 500".浏览器返回“错误 500”。 Intellij IDEA return error "Error MessageBodyWriter not found for media type=application/json". Intellij IDEA 返回错误“找不到媒体类型=应用程序/json 的错误 MessageBodyWriter”。 Here is my code:这是我的代码:

pom.xml pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>app</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>

        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.ext</groupId>
            <artifactId>jersey-entity-filtering</artifactId>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

    <properties>
        <jersey.version>2.23.2</jersey.version>
    </properties>

</project>

web.xml:网页.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>app</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>Jersey Web Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

</web-app>

MessageService:消息服务:

 package app.resource;

import app.model.Message;
import app.service.MessageService;

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 java.util.List;

@Path("messages")
public class MessageResource {

    MessageService messageService = new MessageService();

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Message> getMessages()
    {
        return messageService.getAllMessages();
    }

    @GET
    @Path("/{messageId}")
    @Produces(MediaType.APPLICATION_JSON)
    public Message test(@PathParam("messageId") long id)
    {
        return messageService.getMessage(id);
    }
}

Message class:消息类:

package app.model;

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

@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;
    }
}

Old post, but I figured it could help someone.旧帖子,但我认为它可以帮助某人。 I can across the same issue playing around with Apache Tomcat 9.0.36 and Jersey.我可以在使用 Apache Tomcat 9.0.36 和 Jersey 时遇到同样的问题。 This error is due to a missing media dependency.此错误是由于缺少媒体依赖性所致。 Here are my Jersey POM dependencies that worked for me:这是对我有用的 Jersey POM 依赖项:

<!-- Jersey dependencies -->    
<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-server</artifactId>
  <version>2.29.1</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet</artifactId>
  <version>2.29.1</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.inject</groupId>
  <artifactId>jersey-hk2</artifactId>
  <version>2.29.1</version>
</dependency> 

<!-- Jersey media type files, including XML -->
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-jaxb</artifactId>
    <version>2.29.1</version>
</dependency> 
<!-- Jersey JSON entity providers -->
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.29.1</version>
</dependency>

You can read more about Jersey supported media types in their documentation .您可以在他们的文档中阅读有关 Jersey 支持的媒体类型的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 泽西(Jersey)REST错误,找不到媒体类型= application / json的MessageBodyWriter - Jersey REST error, MessageBodyWriter not found for media type=application/json 泽西与Grizzly:找不到媒体类型= application / json的MessageBodyWriter - Jersey with Grizzly: Getting MessageBodyWriter not found for media type=application/json 未找到 Media type=application/json 的 MessageBodyWriter - MessageBodyWriter not found for media type=application/json 找不到针对媒体类型= application / json的错误MessageBodyWriter - Getting Error MessageBodyWriter not found for media type=application/json 找不到针对媒体类型= application / json的杰克逊网络服务错误MessageBodyWriter - jackson web service error MessageBodyWriter not found for media type=application/json 找不到媒体类型= application / json的MessageBodyWriter - Getting MessageBodyWriter not found for media type=application/json 找不到媒体类型application / json的MessageBodyWriter - MessageBodyWriter not found for media type application/json 未找到媒体类型 = 应用程序/json 的 MessageBodyWriter - MessageBodyWriter not found for media type=application/json 找不到媒体类型= Application / json,glassfish的MessageBodyWriter - MessageBodyWriter not found for media type=Application/json, glassfish Jersey:找不到媒体类型= application / json的MessageBodyWriter,类型= class org.codehaus.jackson.node.ObjectNode? - Jersey: MessageBodyWriter not found for media type=application/json, type=class org.codehaus.jackson.node.ObjectNode?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM