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

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

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

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

Spring Boot

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

Q&A

0回答

717閲覧

Java springboot JPA 部分的にだけvalidationを無視した処理をしたい

pokerStars

総合スコア67

Java

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

Spring Boot

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

0グッド

0クリップ

投稿2019/12/05 13:19

編集2019/12/06 07:54

Todoリストを作成中、締め切りをすぎたタスクを完了にしようとするとサーバエラーになるといったストイックな仕様になってしまいます。
dayカラムの@FutureOrPresent このvalidationのせいでエラーが発生してしまうと思うのですが、未完了・完了ボタンを押した際にvalidationに引っかからないようにする?みたいな処理をしたいです。
ですが、
Todoクラスを

  • リストユーザの入力にマッピングするTodoFormクラス
  • リストデータベースのカラムにマッピングするTodoEntityクラス

に分け,TodoFormクラスにのみ@FutureOrPresentをつけるやり方以外で方法を探しています。
何卒ご教授のほどよろしくお願い致します!

java

1@Controller 2public class HomeController { 3 @Autowired 4 TodoService service; 5 6 @GetMapping("/") 7 public String index(Model model){ 8 Todo todo = new Todo(); 9 model.addAttribute("todo", todo); 10 List<Todo> lists = service.findAll(); 11 model.addAttribute("lists", lists); 12 return "index"; 13 } 14 15 @RequestMapping(value = "/", method = RequestMethod.POST) 16 public String newItem(@ModelAttribute @Validated Todo item, BindingResult bindingResult, Model model ) { 17 if (service.SameNameCreate(item)) { 18 bindingResult.rejectValue("title", null, "このToDoは存在します。"); 19 } 20 if (bindingResult.hasErrors()) { 21 model.addAttribute("todo", item); 22 model.addAttribute("lists", service.findAll()); 23 return "index"; 24 } 25 26 item.setDone(false); 27 service.save(item); 28 return "redirect:/"; 29 } 30 31 32 33 34 35 @RequestMapping(value = "/done", method = RequestMethod.POST) 36 public String done(@RequestParam("id") long id) { 37 Todo item = service.getOne(id); 38 item.setDone(true); 39 service.save(item); 40 return "redirect:/"; 41 } 42 43 @RequestMapping(value = "/restore", method = RequestMethod.POST) 44 public String restore(@RequestParam("id") long id) { 45 Todo item = service.getOne(id); 46 item.setDone(false); 47 service.save(item); 48 return "redirect:/"; 49 } 50}

java

1@Entity 2public class Todo { 3 @Id 4 @GeneratedValue(strategy = GenerationType.IDENTITY) 5 6 private long id; 7 8 @NotNull(message = "文字を入力してください!") 9 @Length(max = 30, message = "30文字以内で記入してください") 10 @Pattern(regexp = "^[\wぁ-んァ-ン一-龥]*[\w\sぁ-んァ-ン一-龥]*[\wぁ-んァ-ン一-龥]$", message = "先頭と末尾にスペースや特殊文字は使用できません") 11 private String title; 12 13 @DateTimeFormat(pattern = "yyyy-MM-dd") 14 @NotNull(message = "日付を入力してください!") 15 @FutureOrPresent(message = "今日以降の日付にしてください") 16 private LocalDate day; 17 18 19 private Boolean done ; 20 21 @Temporal(TemporalType.DATE) 22 @Column(updatable = false) 23 private Date createDay; 24 25 @PrePersist 26 public void prePersist() { 27 this.createDay = new Date(); 28 } 29 30 public Date getCreateDay() { 31 return createDay; 32 } 33 34 public void setCreateDay(Date createDay) { 35 this.createDay = createDay; 36 } 37 38 39 public Long getId() { 40 return id; 41 } 42 43 public void setId(Long id) { 44 this.id = id; 45 } 46 47 public String getTitle() { 48 return title; 49 } 50 51 public void setTitle(String title) { 52 this.title = title; 53 } 54 55 public LocalDate getDay() { 56 return day; 57 } 58 59 public void setDay(LocalDate day) { 60 this.day = day; 61 } 62 63 64 public Boolean getDone() { 65 return done; 66 } 67 68 public void setDone(Boolean done) { 69 this.done = done; 70 } 71} 72

java

1@Service 2@Transactional 3public class TodoService { 4 5 @Autowired 6 private TodoRepository repository; 7 8 public List<Todo> findAll() { 9 return repository.findAll(new Sort(Sort.Direction.DESC, "id")); 10 } 11 12 public Todo getOne(Long id) { 13 return repository.findById(id).orElseThrow(TodoNotFoundException::new); 14 } 15 16 public Todo save(Todo todo) { 17 return repository.save(todo); 18 } 19 20 21 22} 23

java

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"/> 5 <title>Todoリスト</title> 6 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> 7 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> 8 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> 9 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> 10 11</head> 12<body> 13 14 <div th:replace="/common.html::header"></div> 15 16<hr/> 17 <div class="container"> 18 19<h3>新しいTodoを作成する</h3> 20 21<form method="post" th:action="@{/}" th:object="${todo}"> 22 <div class="form-group" th:classappend="${#fields.hasErrors('title')}? has-error"> 23 <label class="control-label">ToDo</label> 24 <input class="form-control" type="text" name="title" /> 25 <span class="text-danger" th:if="${#fields.hasErrors('title')}" th:errors="*{title}"></span> 26 </div> 27 28 <div class="form-group" > 29 <label class="control-label">期限</label> 30 <input class="form-control" type="date" name="day" /> 31 <span class="text-danger" th:if="${#fields.hasErrors('day')}" th:errors="*{day}"></span> 32 33 </div> 34 <input class="btn btn-outline-secondary" type="submit" value="ToDoの追加"/> 35</form> 36 37 38<table class="table table-bordered">  39 <tbody> 40 <tr th:each="list : ${lists}" th:object="${list}"> 41 <td th:text="*{title}"></td> 42 <td th:text="*{day}"></td> 43 <td th:text="${#dates.format(list.createDay, '(yyyy-MM-dd )')}"></td> 44 <td><a class="btn btn-outline-dark" th:href="@{/{id}/edit(id=*{id})}">編集</a></td> 45 46<td> 47 <form th:unless="${list.done}" method="post" th:action="@{/done}" th:object="${list}"> 48 <input type="hidden" name="id" th:value="*{id}" /> 49 <input class="btn btn-outline-danger" type="submit" value="未完了" /> 50 </form> 51 <form th:if="${list.done}" method="post" th:action="@{/restore}" th:object="${list}"> 52 <input type="hidden" name="id" th:value="*{id}" /> 53 <input class="btn btn-outline-primary" type="submit" value="完了" /> 54 </form> 55</td> 56 57 58 </tr> 59 60 <th:block th:if="${#lists.isEmpty(lists)}"> 61 <p>登録されたToDoはございません</p> 62 </th:block> 63 64 </tbody> 65</table> 66 67 </div> 68</body> 69</html>

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問