难以在我的Rest服务中实现PUT注释

时间:2012-12-23 00:55:58

标签: java hibernate tomcat maven

我使用Java,Maven,Hibernate 3 / JPA,Eclipse来实现填充Mysql数据库的PUT方法。

这是我的POJO

 import static javax.persistence.GenerationType.IDENTITY;
    import java.util.Date;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
    import javax.persistence.UniqueConstraint;

    @Entity
    @Table(name = "Person", catalog = "mydb", uniqueConstraints = {
                        @UniqueConstraint(columnNames = "Person"),})
    public class Person implements java.io.Serializable {
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String Name;
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
    return id;
    }

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

    @Column(name = "name", unique = true, nullable = false, length = 30)
    public String getName() {
    return flowName;
    }

    public void setName(String Name) {
    this.Name = Name;
    }

    }

这是我的注释课程。

import javax.ws.rs.Consumes;
    import javax.ws.rs.PUT;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    import org.apache.log4j.Logger;
    import org.hibernate.Session;
    import com.google.gson.Gson;
    import com.tracker.domain.Flow;
    import com.tracker.persistence.HibernateUtil;

    public class PersonService {
    private Logger LOG = Logger.getLogger(TrackerService.class);

    String JsonString = "{\"name\":\"John Doe\"}";
    Gson gson = new Gson();
    Person person = gson.fromJson(JsonString,Person.class);

    @PUT
    @Path("")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public void processandSaveJson(Person person) {

    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    String Name = Person.getName();
    person.setName(Name);
    session.beginTransaction();
    session.save(person);
    session.getTransaction().commit();
    }
    }

这是我的Hibernate.Util。

import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;

    public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();
    private static SessionFactory buildSessionFactory() {

    try {
    // Create the SessionFactory from hibernate.cfg.xml
    return new AnnotationConfiguration().configure().buildSessionFactory();
    } catch (Throwable ex) {

    // Make sure you log the exception, as it might be swallowed
    System.err.println("Initial SessionFactory creation failed." + ex);
    throw new ExceptionInInitializerError(ex);
    }
    }



 public static SessionFactory getSessionFactory() {
    return sessionFactory;
    }

    public static void shutdown() {
    // Close caches and connection pools
    getSessionFactory().close();
    }
    }

这是我的SessionFactory Context Listener类

import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.annotation.WebListener;
    import org.apache.log4j.Logger;
    import org.hibernate.Session;

    @WebListener
    public class SessionFactoryListener implements ServletContextListener {
    private Logger LOG = Logger.getLogger(SessionFactoryListener.class);

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
    if (LOG.isInfoEnabled()) {
    LOG.info("\n\tInside contextInitialized()---\n");
    }

    Session session = HibernateUtil.getSessionFactory().openSession();
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    if (LOG.isInfoEnabled()) {
    LOG.info("\n\tInside contextDestroyed()\n");
    }

    HibernateUtil.shutdown();   
    }   

    }

当我尝试使用Tomcat服务器运行时,我收到以下错误。

type Status report
message Method Not Allowed
description The specified HTTP method is not allowed for the requested resource.

我对此很新。请让我知道我做错了什么。我试图插入一个 使用上面的值记录到mysql数据库中。请帮助我。

谢谢, 千斤顶

1 个答案:

答案 0 :(得分:0)

如评论中所述,您应该提供您的呼叫代码以及其他代码。但是既然你已经提到过你正在使用浏览器来发出请求,那么应该提到大多数/没有浏览器支持'put'而不使用javadcript。你在做什么看起来像一个简单的'得到'。 所以解决方案是在表单提交中使用javascript,或者丢弃REST并使用反映该方法的Urls(例如/ person / new /和/ person / {personId}