Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找不到媒体类型为text/plain、类型为class TestRest.Track、genericType为class TestRest.Track的MessageBodyWriter_Java_Spring_Jar_Jackson_Jersey - Fatal编程技术网

Java 找不到媒体类型为text/plain、类型为class TestRest.Track、genericType为class TestRest.Track的MessageBodyWriter

Java 找不到媒体类型为text/plain、类型为class TestRest.Track、genericType为class TestRest.Track的MessageBodyWriter,java,spring,jar,jackson,jersey,Java,Spring,Jar,Jackson,Jersey,请求JSON格式时出现以下错误,字符串成功返回 找不到媒体类型为text/plain、类型为class TestRest.Track、genericType为class TestRest.Track的MessageBodyWriter 我试着把杰克逊的罐子放低,但没能解决问题 我正在使用下面的jersey和jackson版本并得到错误 1. javax.ws.rs-api-2.0.1.jar 2. aopalliance-repackaged-2.5.0-b32.jar 3. hk2-api-2

请求JSON格式时出现以下错误,字符串成功返回

找不到媒体类型为text/plain、类型为class TestRest.Track、genericType为class TestRest.Track的MessageBodyWriter

我试着把杰克逊的罐子放低,但没能解决问题

我正在使用下面的jersey和jackson版本并得到错误

1. javax.ws.rs-api-2.0.1.jar
2. aopalliance-repackaged-2.5.0-b32.jar
3. hk2-api-2.5.0-b32.jar
4. hk2-locator-2.5.0-b32.jar
5. hk2-utils-2.5.0-b32.jar
6. javassist-3.20.0-GA.jar
7. javax.annotation-api-1.2.jar
8. javax.inject-2.5.0-b32.jar
9. javax.servlet-api-3.0.1.jar
10. jaxb-api-2.2.7.jar
11. jersey-guava-2.25.1.jar
12. org.osgi.core-4.2.0.jar
13. osgi-resource-locator-1.0.1.jar
14. persistence-api-1.0.jar
15. validation-api-1.1.0.Final.jar
16. jersey-client.jar
17. jersey-common.jar
18. jersey-container-servlet.jar
19. jersey-container-servlet-core.jar
20. jersey-media-jaxb.jar
21. jersey-server.jar
22. jackson-annotations-2.9.0.jar
23. jackson-core-2.9.9.jar
24. jackson-databind-2.9.9.1.jar
我曾试图降低杰克逊版本,但问题仍然存在。 下面是我的web.XML配置文件

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>PSG</display-name>
<welcome-file-list>
  <welcome-file>login</welcome-file>
 </welcome-file-list>

 <servlet>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-dispatcher-servlet.xml</param-value>
        </init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

 <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> 

<listener>
    <listener-class>
      org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class>
</listener>

 <context-param>    
  <param-name>contextConfigLocation</param-name>    
  <param-value>/WEB-INF/security-config.xml 
    /WEB-INF/spring-database.xml
  </param-value>    
 </context-param> 
<!-- Logging listener -->
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>
  <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
    <!-- You can also define yourpath with a environment variable and use it like file:${env_variable_path}/log4j.properties  -->
  </context-param>
<filter>    
  <filter-name>springSecurityFilterChain</filter-name>    
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>    
 </filter>    

 <filter-mapping>    
  <filter-name>springSecurityFilterChain</filter-name>    
  <url-pattern>/*</url-pattern>    

 </filter-mapping> 

<session-config>
<session-timeout>10</session-timeout>
</session-config>

      <servlet>

        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationcontext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>

    </servlet> 
   <servlet>
<servlet-name>JAVA API</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>TestRest</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>JAVA API</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<!-- 
   <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.providers</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.resources</param-name>
        <param-value>false</param-value>
    </context-param>
     -->
</web-app>
JAVASERVICE类,其中我调用了TRACK>JAVA类

JSONSERVICE.JAVA
package TestRest;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.jboss.logging.Logger;

import TestRest.Track;

@Path("/json/metallica")
public class JSONService {
    private static final Logger logger = Logger.getLogger(Track.class.getName());
    @GET
    @Path("/get")
    @Produces(MediaType.TEXT_PLAIN)
    public Track getTrackInJSON() {

        Track track = new Track();
        track.setTitle("Enter Sandman");
        track.setSinger("Metallica");
        logger.info(track);
        return track;

    }

    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createTrackInJSON(Track track) {

        String result = "Track saved : " + track;
        return Response.status(201).entity(result).build();

    }
    }

问题是您正在指示Jersey(通过
@products(MediaType.TEXT\u PLAIN)
注释)将您的响应序列化为
TEXT/PLAIN
MIME类型,但Jersey不知道如何做到这一点。您显然希望响应是JSON格式的

只需在
getTrackingson()上将
@products(MediaType.TEXT\u PLAIN)
更改为
@products(MediaType.APPLICATION\u JSON)

JSONSERVICE.JAVA
package TestRest;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.jboss.logging.Logger;

import TestRest.Track;

@Path("/json/metallica")
public class JSONService {
    private static final Logger logger = Logger.getLogger(Track.class.getName());
    @GET
    @Path("/get")
    @Produces(MediaType.TEXT_PLAIN)
    public Track getTrackInJSON() {

        Track track = new Track();
        track.setTitle("Enter Sandman");
        track.setSinger("Metallica");
        logger.info(track);
        return track;

    }

    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createTrackInJSON(Track track) {

        String result = "Track saved : " + track;
        return Response.status(201).entity(result).build();

    }
    }