2017-11-23 7 views
0

학습을 위해 Restygwt를 사용하는 방법에 대한 간단한 데모 프로젝트를 설정하고 싶습니다. 나는이 튜토리얼을 따라 : https://ronanquillevere.github.io/2014/03/16/gwt-rest-app.html 지금까지 가지고이 내 클라이언트 : 나는 버튼GWT - Restygwt - 응답이 유효한 JSON 문서가 아닙니다.

@Override 
public void searchBook(String isbn) { 
    clientContext.getBookStoreClient().getBook(isbn, new MethodCallback<List<Book>>() { 
     @Override 
     public void onFailure(Method method, Throwable exception) { 
      Window.alert("Failure"); 
      GWT.log(exception.getMessage()); 
      GWT.log(stackTraceToString(exception)); 


     } 
     @Override 
     public void onSuccess(Method method, List<Book> response) { 
      for (Book book : response) { 
       Window.alert(book.getIsbn() + " " + book.getAuthor()); 
      } 
     } 

    }); 
} 

private String stackTraceToString(Throwable e) { 
    StringBuilder sb = new StringBuilder(); 
    for (StackTraceElement element : e.getStackTrace()) { 
     sb.append(element.toString()); 
     sb.append("\n"); 
    } 
    return sb.toString(); 
} 
을 클릭했을 때 방법 searchBook (문자열 ISBN)가 트리거됩니다 내 SearchPresenter에서

내 BookstoreClient은 다음과 같습니다

@Path("/api/bookstore/books") 
public interface BookstoreClient extends RestService{ 

@GET 
public void getBooks(MethodCallback<List<Book>> callback); 

@GET 
@Path("/{isbn}") 
public void getBook(@PathParam("isbn") String isbn, MethodCallback<List<Book>> callback); 
} 

내 서버에 BookResource :

@Path("books") 
public class BookResource { 

Map<String, Book> books; 

public BookResource() { 
    books = new HashMap<>(); 

    Book book1 = new Book("1", "Max Mustermann"); 
    books.put(book1.getIsbn(), book1); 

    Book book2 = new Book("2", "Erika mustermann"); 
    books.put(book2.getIsbn(), book2); 
} 

@GET 
@Produces("application/json") 
public Collection<Book> getBooks() { 
    return books.values(); 
} 

@GET 
@Path("/{isbn}") 
@Produces("application/json") 
public Book getBook(@PathParam("isbn") String isbn) { 
    return books.get(isbn); 
} 
} 

그리고 우우 예외 내 공유 패키지

public class Book { 

private final String isbn; 
private final String author; 

@JsonCreator 
public Book(@JsonProperty("isbn")String isbn, @JsonProperty("author")String author) { 
    this.isbn = isbn; 
    this.author = author; 
} 

public String getIsbn() { 
    return isbn; 
} 

public String getAuthor() { 
    return author; 
} 

} 

에 케이하지만 내 GUI의 버튼을 클릭하면 내가 onFailure에 뛰어 얻을 :

응답이 유효한 JSON 문서 아니었다를

Unknown.Throwable_4_g$([email protected]:4312) 
Unknown.Exception_4_g$([email protected]:4550) 
Unknown.RuntimeException_4_g$([email protected]:4597) 
Unknown.new ResponseFormatException_2_g$([email protected]:51000) 
Unknown.parseResult_2_g$([email protected]:33367) 
Unknown.parseResult_1_g$([email protected]:33355) 
Unknown.onResponseReceived_0_g$([email protected]:33312) 
Unknown.fireOnResponseReceived_0_g$([email protected]:14339) 
Unknown.onReadyStateChange_0_g$([email protected]:14647) 
Unknown.<anonymous>([email protected]:30998) 
Unknown.apply_0_g$([email protected]:5498) 
Unknown.entry0_0_g$([email protected]:5554) 
Unknown.<anonymous>([email protected]:5534) 

하지만 내가 URL로 이동하면 :

http://127.0.0.1:8888/api/bookstore/books 

나는 내 브라우저에 보여 다음 얻을

[{"isbn":"1","author":"Max Mustermann"},{"isbn":"2","author":"Erika mustermann"}] 

내가 뭔가를 놓친 건가 또는 RestService의 구현에 망쳐? 미리 말씀해 주셔서 감사합니다.

답변

2

버튼을 클릭하면 버튼이 isbn으로 검색됩니다. 브라우저에서 테스트 한 것처럼 GET /api/bookstore/books을 호출하지 않습니다. .

@GET 
@Path("/{isbn}") 
public void getBook(@PathParam("isbn") String isbn, MethodCallback<List<Book>> callback); 

이 클라이언트 측 방법은 List<Book>을 기대하고 있지만 서버에 당신이하지리스트에 싸여 한 권의 책을 반환

@GET 
@Path("/{isbn}") 
@Produces("application/json") 
public Book getBook(@PathParam("isbn") String isbn) 

정의 :이 실제로 무엇이다. 이것은 아마도 오류의 원인 일 수 있습니다.

+0

내 문제를 해결해 주셔서 감사합니다. – KilledByCheese