2017-04-24 8 views
0

ジャージーとハイバネーションを使用してWebプロジェクトを構築しています。私は郵便配達員の厳しい作業をテストしています。 POSTメソッドの場合、私はNULLポインタの例外を取得し、私は解決する方法を知らない。私を助けてください。私はジャージーで新しいです。ジャーナルのPOSTメソッドのヌルポインター例外

以下は私のコードと完全なスタックトレースです。

BookRepository.com

package com.bookstrore.repository; 

import java.util.ArrayList; 

import java.util.List; 

import org.hibernate.Transaction; 
import org.hibernate.Session; 
import org.hibernate.Query; 

import com.bookstrore.model.Book; 
import com.bookstrore.model.SessionUtil; 
//import com.pluralsight.model.User; 

public class BookRepositoryStub { 

    public void createBook(Book book) { 
     Session session = SessionUtil.getSession();   
      Transaction tx = session.beginTransaction(); 
      createBook(session,book);   
      tx.commit(); 
      session.close(); 

    } 

    private void createBook(Session session, Book bo){ 
     Book book=new Book(); 

     book.setBook_id(bo.getBook_id()); 
     book.setBook_title(bo.getBook_title()); 
     book.setBook_author(bo.getBook_author()); 
     book.setBook_description(bo.getBook_description()); 
     book.setBook_price(bo.getBook_price()); 


     session.save(book); 
    } 

    public List<Book> getBooks(){ 
     Session session = SessionUtil.getSession();  
     Query query = session.createQuery("from Book"); 
     List<Book> books = query.list(); 
     session.close(); 
     return books; 
    } 
    public int delete(int book_id){ 
     Session session = SessionUtil.getSession(); 
     Transaction tx = session.beginTransaction(); 
     String hql = "delete from Book where book_id = :book_id"; 
     Query query = session.createQuery(hql); 
     query.setInteger("book_id",book_id); 
     int rowCount = query.executeUpdate(); 
     System.out.println("Rows affected: " + rowCount); 
     tx.commit(); 
     session.close(); 
     return rowCount; 
    } 

    public int update(int book_id, Book bo){ 
     if(book_id <=0) 
       return 0; 
     Session session = SessionUtil.getSession(); 
      Transaction tx = session.beginTransaction(); 
      String hql = "update Book set book_title = :book_title, book_author = :book_author, book_description = :book_description, book_price = :book_price, where book_id = :book_id"; 
      Query query = session.createQuery(hql); 
      query.setInteger("book_id", book_id); 
      query.setString("book_title",bo.getBook_title()); 
      query.setString("book_author",bo.getBook_author()); 
      query.setString("book_description",bo.getBook_description()); 
      query.setInteger("book_price",bo.getBook_price()); 

      int rowCount = query.executeUpdate(); 
      System.out.println("Rows affected: " + rowCount); 
      tx.commit(); 
      session.close(); 
      return rowCount; 
    } 

} 

BookResource.java

package com.bookstrore; 

    import java.util.List; 



    import javax.ws.rs.Consumes; 
    import javax.ws.rs.DELETE; 
    import javax.ws.rs.GET; 
    import javax.ws.rs.POST; 
    import javax.ws.rs.PUT; 
    import javax.ws.rs.Path; 
    import javax.ws.rs.PathParam; 
    import javax.ws.rs.Produces; 
    import javax.ws.rs.core.MediaType; 
    import javax.ws.rs.core.MultivaluedMap; 
    import javax.ws.rs.core.Response; 
    import javax.ws.rs.core.Response.Status; 

    import com.bookstrore.model.Book; 
    //import com.ebook.model.User; 
    //import com.ebook.repository.BookRepository; 
    import com.bookstrore.repository.BookRepositoryStub; 


    @Path("books") 
    public class BookResource { 
     //private BookRepository bookRepository=new BookRepositoryStub(); 

     @GET 
     @Produces("application/json") 

     public List<Book> getBook() { 
      BookRepositoryStub book = new BookRepositoryStub(); 
      List books = book.getBooks(); 
      return books; 
     } 

     @DELETE 
     @Path("{bookId}") 
     @Consumes("application/json") 
     public Response delete(@PathParam("bookId") int book_id){ 
      BookRepositoryStub book = new BookRepositoryStub(); 
       int count = book.delete(book_id); 
       if(count==0){ 
        return Response.status(Response.Status.BAD_REQUEST).build(); 
       } 


      return Response.ok().build(); 
     } 

     @PUT 
     @Path("{bookId}") 
     //@Consumes(MediaType.APPLICATION_JSON) 
     @Consumes("application/json") 
     public Response update(@PathParam("bookId") int book_id, Book bo){ 
      BookRepositoryStub book = new BookRepositoryStub(); 
      int count = book.update(book_id, bo); 
      if(count==0){ 
       return Response.status(Response.Status.BAD_REQUEST).build(); 

     } 
      return Response.ok().build(); 
     } 

     @POST 
     @Path("book") 
     @Consumes("application/json") 
     //@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
     public Response createBook(Book bo){ 
      bo.setBook_title(bo.getBook_title()); 
      bo.setBook_author(bo.getBook_author()); 
      bo.setBook_description(bo.getBook_description()); 
      bo.setBook_price(bo.getBook_price()); 

      BookRepositoryStub book = new BookRepositoryStub(); 
      book.createBook(bo); 

      return Response.ok().build(); 
     } 

    } 

Book.java 

package com.bookstrore.model; 

import javax.persistence.Column; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="book") 
public class Book { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 

    private int book_id; 
    @Column 
    private String book_title; 
    @Column 
    private String book_author; 
    @Column 
    private String book_description; 
    @Column 
    private int book_price; 
    public int getBook_id() { 
     return book_id; 
    } 
    public void setBook_id(int book_id) { 
     this.book_id = book_id; 
    } 
    public String getBook_title() { 
     return book_title; 
    } 
    public void setBook_title(String book_title) { 
     this.book_title = book_title; 
    } 
    public String getBook_author() { 
     return book_author; 
    } 
    public void setBook_author(String book_author) { 
     this.book_author = book_author; 
    } 
    public String getBook_description() { 
     return book_description; 
    } 
    public void setBook_description(String book_description) { 
     this.book_description = book_description; 
    } 
    public int getBook_price() { 
     return book_price; 
    } 
    public void setBook_price(int book_price) { 
     this.book_price = book_price; 
    } 


} 

の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>com.bookstore</groupId> 
    <artifactId>BookStore</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>BookStore</name> 

    <build> 
     <finalName>BookStore</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <inherited>true</inherited> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencyManagement> 
     <dependencies> 

     <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.2.3</version> 
      </dependency> 
      <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> 
      <!-- use the following artifactId if you don't need servlet 2.x compatibility --> 
      <!-- artifactId>jersey-container-servlet</artifactId --> 
      <version>2.22.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.3.10.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.34</version> 
     </dependency> 

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


</dependencies> 
<properties> 
    <jersey.version>2.22.1</jersey.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This web.xml file is not required when using Servlet 3.0 container, 
    see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html --> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <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>com.bookstrore</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <url-pattern>/webapi/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

スタックトレース:

<pre>java.lang.NullPointerException 
    com.bookstrore.BookResource.createBook(BookResource.java:72) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    java.lang.reflect.Method.invoke(Unknown Source) 
    org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) 
    org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) 
    org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) 
    org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160) 
    org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) 
    org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) 
    org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) 
    org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) 
    org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) 
    org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
    org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
    org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
    org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
    org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
    org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
    org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) 
    org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) 
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) 
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) 
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
</pre> 

私はあなたの助けのために楽しみにしています!お願いします!ありがとうございました!

+0

jackson依存関係を追加しましたか? –

+0

com.fasterxml.jackson.core ジャクソン、データバインド 2.2.3 Lilly

+0

私はこれを追加しましたが、何もあなたがweb.xmlまたはアノテーションを使用してい – Lilly

答えて

0

あなたのコードには2つの問題があると思いますが、それらを変更することで問題は解決します。

まず、クラス "Book"では、id(hibernateによって自動生成される)以外のすべてのパラメータとともにコンストラクタを記述し、引数のないコンストラクタも必要とします。したがって、これを追加してください:

そして、あなたは@Entityと@Tableで行ったように、クラス "Book"を@XmlRootElementとして宣言しなければなりません。

このビデオは、なぜこのすべてのを説明し、それはまた、Webサービスとジャージーと初心者のための素晴らしいチュートリアルです:

https://www.youtube.com/watch?v=BaZdlJSts5A&list=PLqq-6Pq4lTTZh5U8RbdXq0WaYvZBz2rbn&index=14

は、この情報がお役に立てば幸い!あなたのブッククラスは次のようになります:

@Entity 
@Table(name="book") 
@XmlRootElement 
public class Book { 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private int book_id; 
@Column 
private String book_title; 
@Column 
private String book_author; 
@Column 
private String book_description; 
@Column 
private int book_price; 

public Book(){ } 

public Book(String title, String author, String description, int price){ 
    book_title = title; 
    book_author = author; 
    book_description = description; 
    book_price = price; 
} 
public int getBook_id() { 
    return book_id; 
} 
public void setBook_id(int book_id) { 
    this.book_id = book_id; 
} 
public String getBook_title() { 
    return book_title; 
} 
public void setBook_title(String book_title) { 
    this.book_title = book_title; 
} 
public String getBook_author() { 
    return book_author; 
} 
public void setBook_author(String book_author) { 
    this.book_author = book_author; 
} 
public String getBook_description() { 
    return book_description; 
} 
public void setBook_description(String book_description) { 
    this.book_description = book_description; 
} 
public int getBook_price() { 
    return book_price; 
} 
public void setBook_price(int book_price) { 
    this.book_price = book_price; 
} 


} 
+0

あなたが言ったように私の授業書を変更しましたが、同じ問題がまだ発生します。 – Lilly

+0

@Lillyあなたはhibernate.cfg.xmlを持っていますか、それとも作成していませんか?私が以前に言ったように、私は本当にあなたが良いREST Webサービスを作るためにしなければならないすべてのステップを示すので、私が投稿したYouTubeチュートリアルを推奨します。 –

+0

はい私はそれを持っています。私もチュートリアルに従ったが、何もしなかった。 – Lilly

関連する問題