質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

3796閲覧

Spring Boot + Fullcarendar

ren5star

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2018/02/14 06:37

現在SpringBootとFullcarendarを使ったスケジュールアプリのようなものを作ろうとしています。
プログラミングを始めて間も無く、Webアプリ開発もFullcarendarを使うのも初めてでわからないことだらけなので質問させていただきます。
情報が不足していたり、至らない点もあるかと思いますがよろしくお願いいたします。

前提・実現したいこと

テーブルに登録されたイベント情報をカレンダーに表示する

試したこと

サービスクラス(EventService.java)でテーブルに登録されているイベントの中から、ログインユーザーのものだけを取り出してコントローラークラス(DiaryController.java)に渡し、それをdiary.htmlに渡そうとしています。
コントローラの書き方がわからず、他に参考になる資料も見つけることができなかったので
こちら(https://qiita.com/spboot/items/8ff6ea715348d6155001)のサイトを参考に書かせていただきました。

発生している問題・エラーメッセージ

ログを確認するとコントローラのtry catch文でcatch部分に入っているようです。
テーブルの定義がよくないのか、日付のフォーマットがよくないのか、コントローラの書き方がよくないのか何が原因かわからない状態です。

該当のソースコード

EventService.java

java

1package com.example.service; 2 3import java.util.List; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.data.domain.Page; 7import org.springframework.data.domain.Pageable; 8import org.springframework.stereotype.Service; 9import org.springframework.transaction.annotation.Transactional; 10 11import com.example.domain.Event; 12import com.example.domain.User; 13import com.example.repository.EventRepository; 14 15@Service 16@Transactional 17 18public class EventService { 19 @Autowired 20 EventRepository eventRepository; 21 22 public List<Event> findAll() { 23 return eventRepository.findAllOrderByTitle(); 24 } 25 26 public Page<Event> findAll(Pageable pageable) { 27 return eventRepository.findAllOrderByTitle(pageable); 28 } 29 30 public Event findOne(Integer id) { 31 return eventRepository.findOne(id); 32 } 33 34 public Event create(Event event, User user) { 35 event.setUser(user); 36 return eventRepository.save(event); 37 } 38 39 public Event update(Event event, User user) { 40 event.setUser(user); 41 return eventRepository.save(event); 42 } 43 44 public void delete(Integer id) { 45 eventRepository.delete(id); 46 } 47 48 //userを条件とした目標一覧を返す 49 public List<Event> findByUserName(User user){ 50 List<Event> events = eventRepository.findAllWithUserOrderByTitle(); 51 for(int i=0; i<events.size(); i++) { 52 String username = events.get(i).getUser().getUsername(); 53 if(!(username.equals(user.getUsername()))) { 54 events.remove(i); 55 } 56 } 57 return events; 58 } 59 60}

DiaryController.java

java

1package com.example.web; 2 3import java.io.IOException; 4import java.util.List; 5 6import org.springframework.beans.factory.annotation.Autowired; 7import org.springframework.security.core.annotation.AuthenticationPrincipal; 8import org.springframework.stereotype.Controller; 9import org.springframework.web.bind.annotation.GetMapping; 10import org.springframework.web.bind.annotation.RequestMapping; 11 12import com.example.domain.Event; 13import com.example.service.EventService; 14import com.example.service.LoginUserDetails; 15import com.fasterxml.jackson.databind.ObjectMapper; 16 17@Controller 18@RequestMapping("diary") 19public class DiaryController { 20 @Autowired 21 EventService eventService; 22 23 @GetMapping 24 String diary() { 25 return "diary/diary"; 26 } 27 28 @GetMapping(path = "event") 29 public String getEvents(@AuthenticationPrincipal LoginUserDetails userDetails) throws IOException{ 30 String jsonMsg = null; 31 try { 32 List<Event> events = eventService.findByUserName(userDetails.getUser()); 33 // FullCalendarにエンコード済み文字列を渡す 34 ObjectMapper mapper = new ObjectMapper(); 35 jsonMsg = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(events); 36 }catch (IOException ioex) { 37 System.out.println("catch"); 38 } 39 System.out.println("--"); 40 System.out.println(jsonMsg); 41 System.out.println("--"); 42 return jsonMsg; 43 } 44}

V6__add-event.sql

sql

1CREATE TABLE events (id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100), start VARCHAR(100), end VARCHAR(100), tag VARCHAR(100), comment VARCHAR(255)); 2INSERT INTO events (title, start, end, tag, comment) VALUES ('仕事', '2018-02-14 09:00:00', '2018-02-14 18:00:00', '仕事', '大事な会議がある' /*demo*/); 3ALTER TABLE events ADD username VARCHAR(100) NOT NULL DEFAULT 'user1'; 4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rnosh

2018/02/14 07:56

catchした時に発生するエラーメッセージを確認しましょう。どうやらSystem.out.printlnでcatchという文字列を出しているだけで、エラー自体は握りつぶされ、何が原因でcatchされたか全くわかりません。catchスコープ内に"ioex.printStackTrace()"を記述して実行し、コンソールに吐かれるエラーを追記しましょう。
ren5star

2018/02/14 09:25 編集

ご指摘いただいた方法でエラーを出力したら、原因がわかりました。 @ManyToOneと@OneToManyで循環参照になり、StackOverflowErrorが出ていたようです。 ありがとうございました!
guest

回答1

0

ベストアンサー

SpringBootでJSONレスポンスを出力したいのであれば、Controllerは @Controller ではなく、@RestController を使えばJacksonのObjectMapperを書かずに出力できます。

その時に、diary() はHTML(Thymeleaf)ないしはJSPのページへフォワードしているので、これは別のControllerで定義すると良いでしょう。

java

1@RestController 2@RequestMapping("diary") 3public class DiaryController { 4 @Autowired 5 EventService eventService; 6 7 @GetMapping(path = "event") 8 public List<Event> getEvents(@AuthenticationPrincipal LoginUserDetails userDetails) throws IOException{ 9 List<Event> events = eventService.findByUserName(userDetails.getUser()); 10 return events; 11 } 12}

投稿2018/02/14 09:20

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ren5star

2018/02/14 09:28

ご指摘の通り、RestControllerとControllerを混同してしまっていました。 Controllerを二つに分けるとカレンダーに正しくイベントを表示することができました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問