2016-09-29 4 views
0

Я попытался посмотреть в Интернете примеры, которые используют метод put rest, аналогичный примеру dropwizard на github, но я его действительно не нашел.Как мы можем реализовать операцию put с помощью dropwizard

вот мой PersonDAO.java код

public class PersonDAO extends AbstractDAO<Person> { 
    public PersonDAO(SessionFactory factory) { 
     super(factory); 
    } 
    public Optional<Person> findById(Long id) { 
     return Optional.fromNullable(get(id)); 
    } 

    public Person create(Person person) { 
     return persist(person); 
    } 

    public List<Person> findAll() { 
     return list(namedQuery("com.example.helloworld.core.Person.findAll")); 
    } 
    //here i want to create delete method 
} 

здесь мой отдых код апи:

@Path("/people") 
@Produces(MediaType.APPLICATION_JSON) 
public class PeopleResource { 

    private final PersonDAO peopleDAO; 

    public PeopleResource(PersonDAO peopleDAO) { 
     this.peopleDAO = peopleDAO; 
    } 

    @POST 
    @UnitOfWork 
    public Person createPerson(Person person) { 
     return peopleDAO.create(person); 
    } 

    @GET 
    @UnitOfWork 
    public List<Person> listPeople() { 
     return peopleDAO.findAll(); 
    } 

    @GET 
    @Path("/{id}") 
    public Optional<Person> getUser(@PathParam("id") Integer id) { 
     Optional<Person> person = peopleDAO.findPeopleById(id); 
     return person; 
    } 
    //here should be put method that calls dao class 
} 

вот мой person.java класс

@Entity 
@Table(name = "people") 
@NamedQueries(
    { 
     @NamedQuery(
      name = "com.example.helloworld.core.Person.findAll", 
      query = "SELECT p FROM Person p" 
     ) 
    } 
) 
public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @Column(name = "fullName", nullable = false) 
    private String fullName; 

    @Column(name = "jobTitle", nullable = false) 
    private String jobTitle; 

    public Person() { 
    } 

    public Person(String fullName, String jobTitle) { 
     this.fullName = fullName; 
     this.jobTitle = jobTitle; 
    } 

    public long getId() { 
     return id; 
    } 

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

    public String getFullName() { 
     return fullName; 
    } 

    public void setFullName(String fullName) { 
     this.fullName = fullName; 
    } 

    public String getJobTitle() { 
     return jobTitle; 
    } 

    public void setJobTitle(String jobTitle) { 
     this.jobTitle = jobTitle; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) { 
      return true; 
     } 
     if (!(o instanceof Person)) { 
      return false; 
     } 

     final Person that = (Person) o; 

     return Objects.equals(this.id, that.id) && 
       Objects.equals(this.fullName, that.fullName) && 
       Objects.equals(this.jobTitle, that.jobTitle); 
    } 

    @Override 
    public int hashCode() { 
     return Objects.hash(id, fullName, jobTitle); 
    } 
} 

Есть ли простой пути/предложения по внедрению метода put?

+0

Вы имеете в виду запрос на посылку? Вы можете использовать аннотации @ Get, @ Post, @ Put, @ Delete над методом ресурсов, чтобы указать, какие операции он поддерживает. Есть ли ошибка, которую вы получаете, когда пытаетесь? – Brion

ответ

0

ресурс:

@PUT 
public Person update(Person person) { 
    return peopleDAO.update(person); 
} 

дао:

public Person update(Person person) { 
    return persist(person); 
} 

быть уверены, что ваш идентификатор не является нулевым. сохранить или обновить логику.

+0

Заменит ли это запись в базе данных? Например, если я использую запрос put и мой url в localhost http: // localhost: 8080/people/2, где два являются основным идентификатором базы данных, будет ли обновлять вторую запись в базе данных? – Bob

+0

есть. если у вас нет контроля. Для подобных состояний я использую столбец с аннотацией @Version. Например, – Hasan

+0

@Version private long lastUpdated; – Hasan

 Смежные вопросы

  • Нет связанных вопросов^_^