Problem z wyświetleniem bazy danych z json

0

Witam mam problem z wgraniem danych z pliku json. W przegladarce pokazuje sie tylko [] element tablicy. Ktos wie?

@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}

@Bean
CommandLineRunner runner(ServiceBooks serviceBooks){
return args -> {
// read JSON and load json
ObjectMapper mapper = new ObjectMapper();
TypeReference<List<Books>> typeReference = new TypeReference<List<Books>>(){};
InputStream inputStream = TypeReference.class.getResourceAsStream("/dbjson/book.json");
try {
List<Books> book = mapper.readValue(inputStream,typeReference);
serviceBooks.save((Books) book);
System.out.println("Books Saved!");
} catch (IOException e){
System.out.println("Unable to save books: " + e.getMessage());
}
};
}
}

Kontroler:
@RestController
@RequestMapping("/")
public class ControllerBooks {
//
ServiceBooks serviceBooks;

@Autowired
public ControllerBooks(ServiceBooks serviceBooks) {
this.serviceBooks = serviceBooks;
}

@GetMapping("/api/books")
public Iterable<Books> list() {
    return serviceBooks.list();
}

Serwis:
@Service
public class ServiceBooks {

RepositoryBooks repositoryBooks;

@Autowired
public ServiceBooks(RepositoryBooks repositoryBooks) {
this.repositoryBooks = repositoryBooks;
}

public Iterable<Books> list() {
    return repositoryBooks.findAll();
}

//
public Books save(Books books) {
return repositoryBooks.save(books);
}

public void zapisz (List<Books> book) {
    repositoryBooks.saveAll(book);
}

Repozytorium:
@Repository
public interface RepositoryBooks extends CrudRepository<Books,String> {

Plik Json(wyciałem kawałek):

{
"requestedUrl": "https://www.googleapis.com/books/v1/volumes?q=java&maxResults=40",
"items": [
{
"kind": "books#volume",
"id": "7tkN1CYzn2cC",
"etag": "pfjjxSpetIM",
"selfLink": "https://www.googleapis.com/books/v1/volumes/7tkN1CYzn2cC",
"volumeInfo": {
"title": "A Hypervista of the Java Landscape",
"publisher": "InfoStrategist.com",
"industryIdentifiers": [
{
"type": "ISBN_13",
"identifier": "9781592432172"
},
{
"type": "ISBN_10",
"identifier": "1592432174"
}
],

0

Jak wpisuje http://localhost:8080/api/books to pokazuje się []

0

Albo ogólnie jak wyświetlić te dane z pliku json jako baza danych ?Bo ciągle mam z tym problem.

0
Dawid040791 napisał(a):

Albo ogólnie jak wyświetlić te dane z pliku json jako baza danych ?Bo ciągle mam z tym problem.

Obawiam się, że nie rozumiesz słowa "baza danych". Spróbuj to inaczej określić, bo nie wiadomo o co ci chodzi

0

Z pliku Json mają byc pobierane dane w celu wyswietlenia np na localhost:8080/api/book/{isbn}. Np. https://zapodaj.net/fe05345819a92.png.html

0

Obawiam się, że plik json który wrzuciłeś to jest to body request który tworzy książkę. Co za tym idzie taka książka jest zapisana w bazie danych. Następnie jak już ją zapiszesz w bazie danych to pobierasz wedle uznania po isbn czy czym tam chcesz.

0

Właśnie mam problem z wyswietleniem danych po przez localhost:8080 z tego pliku.

0

Plik mam w folderze resources ponieważ nie ma byc uzyta baza danych(mysql itp). Treśc:The Homework app can't require any other 3rd party software to be installed manually (e.g. manual setup of the Tomcat Server or MySQL database).

0

A czy ten kawałek kodu na pewno sie wykonuje?


try {
List<books> book = mapper.readValue(inputStream,typeReference);
serviceBooks.save((Books) book);
System.out.println("Books Saved!");
} catch (IOException e){
System.out.println("Unable to save books: " + e.getMessage());
}
};

Bo po tym powinny się zapisać w bazie. Po drugie z treści zadania wynika, że nie masz używać zewnętrznych zalezności więc nie wiem po co pchać się w JPA. Dla mnie sprawa jest prosta.
Tworzysz proste repozytorium na zasadzie:

class BookRepository {
List<Books> saved = new ArrayList();

void saveAll(List<Books> booksToSave) {
saved.addAll(booksToSave)
}
}

W tym samym repo implementujesz findAll findByIbnNumber czy co tam chcesz.

0

Nie zapisuje

0

Odpaliłem projekt. Generalnie leci błąd przy zapisie, ale że Ty robisz try catch i printujesz tylko małą jego część to nie widzisz co się dzieje.

2019-05-06 18:22:29.580 ERROR 8043 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:816) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:797) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:324) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at application.demo.DemoApplication.main(DemoApplication.java:23) ~[classes/:na]
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
 at [Source: UNKNOWN; line: 1, column: 0]
	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59) ~[jackson-databind-2.9.8.jar:2.9.8]
	at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4145) ~[jackson-databind-2.9.8.jar:2.9.8]
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4000) ~[jackson-databind-2.9.8.jar:2.9.8]
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3077) ~[jackson-databind-2.9.8.jar:2.9.8]
	at application.demo.DemoApplication.lambda$runner$0(DemoApplication.java:35) ~[classes/:na]
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	... 5 common frames omitted

Napraw błąd i wtedy zobacz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1