GET не показывает объекты Опубликовано, который реализован в динамическом веб-проекте Java - PullRequest
0 голосов
/ 24 августа 2018

Я реализую (в Eclipse) простой способ установки и использования моего Java API.

Код выглядит следующим образом:

@Path("/jason")
public class JavajsonRestApi {

    List<Book> bookList = new ArrayList<>();

    @GET
    @Path("/json")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes({MediaType.APPLICATION_JSON})
    public List<Book> getJson() {
        return bookList;
    }

    @POST
    @Path("/json")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Book> postJson(Book book) {
        bookList.add(book);
        return bookList;
    }

}

bookList - это глобальная переменная, объявленная вне методов. Используя post post, я перемещаю объекты в указанную конечную точку. С помощью get я получаю список объектов с одной и той же конечной точки.

Но GET показывает пустой список, несмотря на добавление в список, более того bookList здесь является глобальной переменной. GET должен показать список опубликованных книг.

Почему странное поведение?

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Я уверен, что вы должны вернуть объект класса javax.ws.rs.core.Response вместо списка книг. Это может выглядеть так:

return Response.status(Response.Status.OK).entity(bookList).build();
0 голосов
/ 27 августа 2018

Одно из решений этой проблемы, с которой я работал, было от: https://javabrains.io/courses/javaee_jaxrs/lessons/Implementing-POST-Method/

Реализация кода изменяется на:

@Path("/jason")
public class JavajsonRestApi {

private Booklist  bookList = new Booklist();

    @POST
    @Path("/json")
    @Consumes(MediaType.APPLICATION_JSON)
    public Book postJson(Book book) {
      bookList.addBook(book);
      return book;
    }

    @GET
    @Path("/json")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Book> getJson() {
        return bookList.getAllBooks();
    }
}

Реализация Booklist имеет вид:

public class Booklist {

private Map<Long, Book> books = Databaseclasss.getBooks();

public Booklist() {
    books.put(1L, new Book("I","you",1));
    books.put(2L, new Book("me","me",2));
}

public List<Book> getAllBooks(){
    return new ArrayList<Book>(books.values());
}

public Book getBook(Long id) {
    return books.get(id);
}

public Book addBook(Book book) {
    book.setid(books.size()+1);
    books.put(book.getId().longValue(), book);
    return book;
}

public Book removeBook(Long id) {
    return books.remove(id);
}
}

Реализация Databaseclass выглядит следующим образом:

public class Databaseclasss {

private static Map<Long, Book> books= new HashMap<>();

public static Map<Long, Book> getBooks(){
    return books;
}
}

Я надеюсь, что это будет полезно и для других.

Спасибо Лорен и Стафс за ценные ответы.

0 голосов
/ 24 августа 2018

Просто пара указателей, которые могут вам помочь;

  • Ваш postJson () не должен выдавать и не должен возвращать список
  • Добавьте @Consumes в свой постJson ()
  • Ваш getJson () не должен потреблять
  • Я бы просто использовал опубликованную вами переменную bookList вместо глобальной переменной, но правильно ее инициализировал (private)

Это, вероятно, должно решить вашу проблему, но не забудьте отладить! Проверьте значения, которые возвращают ваши методы

...