2016-05-28 17 views
0

RESTful APIを開発するための小さなデモプログラムを作成しましたが、私はWeb APIをテストするためにPostmanフレームワークを使用しています。 GET要求は正常に機能しますが、POST要求はエラーを返します。私は、コードの最後にPostmanフレームワークによるエラーメッセージを追加しました。RESTful APIを開発し、Postmanフレームワークを使用してWeb APIをテスト中にエラーが発生しました

This is my model class named Message 

package com.abc.model; 

import java.util.Date; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class Message { 

private long id; 
private String msg; 
private String author; 
private Date date; 

public Message() { 

} 

public Message(long id, String msg, String author, Date date) { 
    this.id = id; 
    this.msg = msg; 
    this.author = author; 
    this.date = date; 
} 

public long getId() { 
    return id; 
} 


public void setId(long id) { 
    this.id = id; 
} 


public String getMsg() { 
    return msg; 
} 

public void setMsg(String msg) { 
    this.msg = msg; 
} 

public String getAuthor() { 
    return author; 
} 


public void setAuthor(String author) { 
    this.author = author; 
} 


public Date getDate() { 
    return date; 
} 


public void setDate(Date date) { 
    this.date = date; 
} 

} 

Instead of using Hibernate/Database tables, I have created a class called Database class 

package com.abc.database; 

import java.util.HashMap; 
import java.util.Map; 

import com.abc.model.Message; 

public class DatabaseTable { 
//Any class in the application can access map of messages and profiles by calling these static methods(getMessages()) 

private static Map<Long, Message> messages =new HashMap<>(); 


public static Map<Long,Message> getMessages() { 
    return messages; 
    } 

} 

This is my service class 

package com.abc.service; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 
import java.util.Date; 

import com.abc.database.DatabaseTable; 
import com.abc.model.Message; 

public class MessageService { 

    private Map<Long, Message> messages = DatabaseTable.getMessages(); 

    public MessageService(){ 
    messages.put(1L, new Message(1,"This is a message from Ridh","Ridhi", new Date())); 
    messages.put(2L, new Message(2,"Message from Steve", "Steve", new Date())); 
}  

    public List<Message> fetchMessages() { 
     return new ArrayList<Message>(messages.values()); 
    } 


    public Message retrieveMessage(long id) { 
     return messages.get(id); 
    } 


    public Message addMessage(Message message) { 
     message.setId(messages.size() + 1); 
     messages.put(message.getId(), message); 
     return message; 
    } 

    public Message updateMessage(Message message){ 
     messages.put(message.getId(),message); 
     return message; 
    } 

    public Message deleteMessage(long id){ 
     return messages.remove(id); 
    } 
} 

This is my Resource class calling the service 


package com.abc.resource; 

import javax.ws.rs.Path; 

import java.util.List; 

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

import com.abc.service.MessageService; 

@Path("/messages") 
public class MainResource { 

    MessageService ms = new MessageService(); 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<Message> display() 
    return ms.fetchMessages(); 
    } 


    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public Message addMessage(Message message) { 
     return ms.addMessage(message); 
    } 
} 

This is the 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" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
    <display-name>RestWebService</display-name> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
     <welcome-file>index.htm</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>default.html</welcome-file> 
     <welcome-file>default.htm</welcome-file> 
     <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>Rest Web Application</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Rest Web Application</servlet-name> 
     <url-pattern>/HelloREST/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

This is the pom.xml of my project 

<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>RestWebService</groupId> 
    <artifactId>RestWebService</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <properties> 
     <java-version>1.6</java-version> 
     <org.springframework-version>4.0.3.RELEASE</org.springframework-version> 
     <org.aspectj-version>1.7.4</org.aspectj-version> 
     <org.slf4j-version>1.7.5</org.slf4j-version> 
     <hibernate.version>4.3.5.Final</hibernate.version> 
    </properties> 
    <build> 
     <sourceDirectory>src</sourceDirectory> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <warSourceDirectory>WebContent</warSourceDirectory> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.tomcat</groupId> 
    <artifactId>tomcat-servlet-api</artifactId> 
    <version>8.5.0</version> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.38</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>4.2.5.RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>4.2.6.RELEASE</version> 
</dependency> 

<!-- Spring ORM --> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-orm</artifactId> 
    <version>${org.springframework-version}</version> 
</dependency> 

<dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 


<!-- Apache Commons DBCP --> 
     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.4</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <version>2.3.3</version> 
     </dependency> 

<!-- Servlet --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 




<!-- Logging --> 
<dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.15</version> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.mail</groupId> 
        <artifactId>mail</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.jms</groupId> 
        <artifactId>jms</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jdmk</groupId> 
        <artifactId>jmxtools</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jmx</groupId> 
        <artifactId>jmxri</artifactId> 
       </exclusion> 
      </exclusions> 
      <scope>runtime</scope> 
     </dependency> 

     <!-- @Inject --> 
     <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
     </dependency> 


    <dependency> 
    <groupId>org.hsqldb</groupId> 
    <artifactId>hsqldb</artifactId> 
    <version>2.3.3</version> 
</dependency> 

     <dependency> 
      <groupId>asm</groupId> 
      <artifactId>asm</artifactId> 
      <version>3.3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-bundle</artifactId> 
      <version>1.18.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.json</groupId> 
      <artifactId>json</artifactId> 
      <version>20140107</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-core</artifactId> 
      <version>1.18.1</version> 
     </dependency> 
    </dependencies> 
</project> 
Error message(Postman framework) 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Apache Tomcat/8.0.32 - Error report</title> 
     <style type="text/css">H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}.line {height: 1px; background-color: #525D76; border: none;}</style> 
    </head> 
    <body> 
     <h1>HTTP Status 500 - Servlet execution threw an exception</h1> 
     <div class="line"></div> 
     <p> 
      <b>type</b> Exception report 
     </p> 
     <p> 
      <b>message</b> 
      <u>Servlet execution threw an exception</u> 
     </p> 
     <p> 
      <b>description</b> 
      <u>The server encountered an internal error that prevented it from fulfilling this request.</u> 
     </p> 
     <p> 
      <b>exception</b> 
     </p> 
     <pre>javax.servlet.ServletException: Servlet execution threw an exception 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
</pre> 
     <p> 
      <b>root cause</b> 
     </p> 
     <pre>java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory 
    com.sun.jersey.json.impl.reader.JsonXmlStreamReader.create(JsonXmlStreamReader.java:110) 
    com.sun.jersey.json.impl.Stax2JsonFactory.createReader(Stax2JsonFactory.java:137) 
    com.sun.jersey.json.impl.Stax2JsonFactory.createReader(Stax2JsonFactory.java:127) 
    com.sun.jersey.json.impl.BaseJSONUnmarshaller.createXmlStreamReader(BaseJSONUnmarshaller.java:116) 
    com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalJAXBElementFromJSON(BaseJSONUnmarshaller.java:111) 
    com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalFromJSON(BaseJSONUnmarshaller.java:100) 
    com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider.readFrom(JSONRootElementProvider.java:154) 
    com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.readFrom(AbstractRootElementProvider.java:111) 
    com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:490) 
    com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123) 
    com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:86) 
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153) 
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:183) 
    com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
    com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) 
    com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
    com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) 
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) 
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) 
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) 
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) 
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540) 
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
</pre> 
     <p> 
      <b>root cause</b> 
     </p> 
     <pre>java.lang.ClassNotFoundException: org.codehaus.jackson.JsonFactory 
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308) 
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142) 
    com.sun.jersey.json.impl.reader.JsonXmlStreamReader.create(JsonXmlStreamReader.java:110) 
    com.sun.jersey.json.impl.Stax2JsonFactory.createReader(Stax2JsonFactory.java:137) 
    com.sun.jersey.json.impl.Stax2JsonFactory.createReader(Stax2JsonFactory.java:127) 
    com.sun.jersey.json.impl.BaseJSONUnmarshaller.createXmlStreamReader(BaseJSONUnmarshaller.java:116) 
    com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalJAXBElementFromJSON(BaseJSONUnmarshaller.java:111) 
    com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalFromJSON(BaseJSONUnmarshaller.java:100) 
    com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider.readFrom(JSONRootElementProvider.java:154) 
    com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.readFrom(AbstractRootElementProvider.java:111) 
    com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:490) 
    com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123) 
    com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:86) 
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153) 
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:183) 
    com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
    com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) 
    com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
    com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) 
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) 
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) 
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) 
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) 
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540) 
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
</pre> 
     <p> 
      <b>note</b> 
      <u>The full stack trace of the root cause is available in the Apache Tomcat/8.0.32 logs.</u> 
     </p> 
     <hr class="line"> 
     <h3>Apache Tomcat/8.0.32</h3> 
    </body> 
</html> 
+1

編集あなたサンジーブサハありがとう – suku

答えて

0

jackson-mapper-aslの依存関係をpom.xmlの依存関係セクションに追加してください。たとえば、あなたはのpom.xmlに以下を追加する可能性があります。

<dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.9.13</version> 
    </dependency> 
+0

関連部分のみを表示するコード部分。 jackson-mapper-asl依存関係を追加した後、POST要求が正常に動作します。 しかし、更新メソッド のPostmanでPUTリクエストを使用すると、404エラーが発生します。別の依存関係を追加する必要がありますか? – Ridhi

関連する問題