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

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

ただいまの
回答率

90.50%

  • Java

    15847questions

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

  • Spring Boot

    726questions

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

  • Thymeleaf

    193questions

    Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

エラー画面のカスタマイズをしたい springboot

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 648

Yoshi--

score 50

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<title>婚活サイト</title>
<link rel="stylesheet"
    href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
    th:href="@{/webjars/bootstrap/3.3.7/css/bootstrap.min.css}" />
<link rel="stylesheet"
    href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
    th:href="@{/webjars/bootstrap/3.3.7/css/bootstrap-theme.min.css}" />
</head>

<body th:with="user=${#authentication.principal.user}">
    <!-- authenticationで認証ユーザー情報にアクセスできる 、principalプロパティでUserDetailsオブジェクトにアクセスできるので、user.mailでログインユーザー名が分かる-->

    <h2>
        <span th:text="${user.mail}">メアド</span> さん、ログイン中
    </h2>

    <table class="table table-striped table-bordered table-condensed">
        <h2>登録ユーザー 一覧</h2>
        <tr>
            <th>写真</th>
            <th>名前</th>
            <th>性別</th>
            <th>誕生日</th>
            <th>身長(cm)</th>
            <th>職業</th>
            <th>年収(万円)</th>
            <th>メールアドレス</th>
            <th>自己紹介</th>
        </tr>

        <tr th:each="profile : ${profiles}">
            <!-- エンコードした画像の表示 -->
            <td><img th:src="${'data:image/png;base64,' + profile.image}"
                width="250" height="150" /></td>
            <td th:text="${profile.name}">山田</td>
            <td th:text="${profile.gender}"></td>
            <td th:text="${profile.birthday}">誕生日</td>
            <td th:text="${profile.height}">170</td>
            <td th:text="${profile.occupationName}">職業</td>
            <td th:text="${profile.income}">年収</td>
            <td th:text="${profile.mail}">メール</td>
            <!-- 「profile」オブジェクトがもつ「user」の「mail」を表示 -->
            <td th:text="${profile.text}">自己紹介</td>
            <td>
                <form th:action="@{/konkatsu/createFavorite}" method="post">
                    <input type="hidden" name="userId" th:value="${user.userId}" /> <input
                        type="hidden" name="favoriteUserId" th:value="${profile.id}" />
                    <button type="submit"></button>
                    <br/>お気に入りにする
                </form>
            </td>
            <td>
                <form th:action="@{/konkatsu/deleteFavorite}" method="post">
                    <input type="hidden" name="userId" th:value="${user.userId}" /> <input
                        type="hidden" name="favoriteUserId" th:value="${profile.id}" />
                    <button type="submit">×</button>
                    <br/>お気に入りをやめる
                </form>
            </td>
        </tr>
    </table>

    <div th:fragment='paginationbar'>
        <ul>
            <li th:class="${page.first} ? 'disabled':''" style="display: inline">
                <span th:if="${page.first}">←先頭</span> <a th:if="${not page.first}"
                th:href="@{${url}(searchName=${param.searchName},genderId=${param.genderId}, page=0)}">←先頭</a>
            </li>

            <!-- #numbers.sequenceは引数に指定した2つの数値の範囲で配列を生成 -->
            <li th:each='i : ${#numbers.sequence(0, page.totalPages-1)}'
                th:class="(${i}==${page.number})? 'active' : ''"
                style="display: inline"><span th:if='${i}==${page.number}'
                th:text='${i+1}'>1</span> <a th:if='${i}!=${page.number}'
                th:href="@{${url} (searchName=${param.searchName}, genderId=${param.genderId}, page=${i})}">
                    <span th:text='${i+1}'>1</span>
            </a></li>
            <li th:class="${page.last} ? 'disabled':''" style="display: inline">
                <span th:if="${page.last}">末尾➝</span> <a th:if="${not page.last}"
                th:href="@{${url}(searchName=${param.searchName}, genderId=${param.genderId}, page=(${page.totalPages}-1))}">末尾➝</a>
            </li>
        </ul>
    </div>

    <form th:action="@{/konkatsu/myProfile}" method="get">
        <input type="hidden" name="id" th:value="${user.userId}" />
        <button type="submit" class="btn btn-lg btn-primary btn-block">Myページへ</button>
    </form>

</body>
</html>

お気に入り機能を作成中なのですが
一度お気に入りにして
もう一度お気に入りにしようとすると
当然このようなエラーが出ます

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri Aug 04 11:39:14 JST 2017
There was an unexpected error (type=Internal Server Error, status=500).
could not execute statement; SQL [n/a]; constraint [favorite_pkey]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

そのためこのエラーの時に

すでにお気に入りされています

<トップページに戻る>

みたいな画面を表示したいのですが

どのようなやり方があるのでしょうか??

少しでいいのでお教えください

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

Controllerに@ExceptionHandlerを使ったメソッドを実装しましょう。

または、お気に入りを押された時に、すぐにINSERT処理を実行するのではなく、SELECT処理をしてヒット数が0件ならINSERTを実行する。1件以上ヒットしたなら登録済みのメッセージを表示して同じ画面を表示するのがスマートでしょうか。

Spring 例外ハンドリング

ないしは

Spring ExceptionHandler

で色々参考になる情報が見つかるでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/04 13:34

    回答ありがとうございます!!!!!

    参考にしてやってみます。
    ありがとうございました!!

    キャンセル

同じタグがついた質問を見る

  • Java

    15847questions

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

  • Spring Boot

    726questions

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

  • Thymeleaf

    193questions

    Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。