81133


以下の質問の続きとなります。

[SpringBootにて、List内の要素を一つずつHTML側に表示したい](https://ja.stackoverflow.com/questions/81035/springboot%E3%81%AB%E3%81%A6-list%E5%86%85%E3%81%AE%E8%A6%81%E7%B4%A0%E3%82%92%E4%B8%80%E3%81%A4%E3%81%9A%E3%81%A4html%E5%81%B4%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%9F%E3%81%84)

Spring
Bootでカレンダーを作成しており、日付を押下した際に該当の日付に対してスケジュールがあった場合、DBからその内容を呼び出し、更新があった場合の処理を記載しています。  
入力フォーム内を変更後にボタンを押下すると以下エラーが発生してしまい更新できませんでした。

[code]

    There was an unexpected error (type=Internal Server Error, status=500).
    Mapper method 'com.example.demo.repository.PlanMapper.update' has an unsupported return type: interface java.util.List
    org.apache.ibatis.binding.BindingException: Mapper method 'com.example.demo.repository.PlanMapper.update' has an unsupported return type: interface java.util.List
    
[/code]

お手数ですが、記載のソースコード以外で良きアイデア等ございましたら、ご教示いただけますと幸いです。

**MainController**

[code]

    package com.example.demo.controller;
    
    import java.time.LocalDate;
    import java.time.YearMonth;
    import java.time.temporal.TemporalField;
    import java.time.temporal.WeekFields;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import com.example.demo.entity.Day;
    import com.example.demo.entity.MyCalendar;
    import com.example.demo.entity.Plan_search;
    import com.example.demo.service.PlanService;
    
    @Controller
    public class MainController {
        
        @Autowired
        private PlanService planService;
        
        /* Calendar画面 */
        
        // 週の始まりが日曜日
        private static final TemporalField DAY_OF_WEEK = WeekFields.SUNDAY_START.dayOfWeek();
        
        @GetMapping("/")
        public String calendar(final Model model) {
            // 今日
            final LocalDate today = LocalDate.now();
            // 今月初日
            final LocalDate beginOfMonth = today.withDayOfMonth(1);
            // 今月末日
            final LocalDate endOfMonth = today.withDayOfMonth(today.lengthOfMonth());
            // カレンダー初日
            // 月曜日の週の1日目(=日曜日)
            final LocalDate beginOfCalendar = beginOfMonth.with(DAY_OF_WEEK, 1);
            // カレンダーの末日
            // 月末日の週の７日目(=土曜日)
            final LocalDate endOfCalendar = endOfMonth.with(DAY_OF_WEEK, 7);
            
            final List<List<Day>> weeks = new ArrayList<>();
            for (LocalDate day = beginOfCalendar; day.isBefore(endOfCalendar);) {
                final List<Day> week = new ArrayList<>();
                weeks.add(week);
                for (int i = 0; i < 7; i++) {
                    final Day d = new Day();
                    d.setDayOfMonth(day.getDayOfMonth());
                    if (day.isEqual(today)) {
                        d.setToday(true);
                    }
                    week.add(d);
                    day = day.plusDays(1);
                }
            }
    
            final MyCalendar cal = new MyCalendar();
            cal.setWeeks(weeks);
            
            // タイトル部分の年月の取得
           YearMonth year = YearMonth.now();
    
           model.addAttribute("calendar", cal);
           model.addAttribute("year", year);
            return "index";
        }
        
    /* Schedule画面 */
        
        // 検索
        @RequestMapping(value="plan", method=RequestMethod.POST)
        public String daysearch(@RequestParam int day, Model model) {
            List<Plan_search> search = planService.daysearch(day);
            model.addAttribute("Planlist", search);
            return "plan";
        }
        
        // 更新
        @PostMapping(path = "plan", params="edit")
        public String update(@RequestParam String schedule,String day, Model model) {
            planService.planupdate(schedule, day);
            return "redirect:plan";
        }
        
        // 削除
        @PostMapping(path = "plan", params="delete")
        public String delete(@RequestParam String schedule, Model model) {
            planService.plandelete(schedule);
            return "redirect:plan";
        }
        
        // 閉じる
        @PostMapping(path = "plan", params="close")
        public String close() {
            return "redirect:/";
        }
    
    }
    
[/code]

**PlanService**

[code]

    package com.example.demo.service;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.demo.entity.Plan_search;
    import com.example.demo.repository.PlanRepository;
    
    @Service
    public class PlanService{
        
        @Autowired
        private PlanRepository planRepository;
        
        // 検索
        public List<Plan_search> daysearch(int day) {
            return planRepository.daysearch(day);
        }
        
        // 更新
        public List<Plan_search> planupdate(String schedule, String day){
            return planRepository.planupdate(schedule, day);
        }
        
        // 削除
        public List<Plan_search> plandelete(String schedule){
            return planRepository.plandelete(schedule);
        }
    
    }
    
[/code]

**PlanRepository**

[code]

    package com.example.demo.repository;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    
    import com.example.demo.entity.Plan_search;
    
    @Repository
    public class PlanRepository {
        
        @Autowired
        private PlanMapper planMapper;
        
        // 検索
        public List<Plan_search> daysearch(int day) {
            return planMapper.daysearch(day);
        }
        
        // 更新
        public List<Plan_search> planupdate(String schedule, String day){
            return planMapper.update(schedule, day);
        }
        
        // 削除
        public List<Plan_search> plandelete(String schedule){
            return planMapper.delete(schedule);
        }
    
    }
    
[/code]

**PlanMapper**

[code]

    package com.example.demo.repository;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    
    import com.example.demo.entity.Plan_search;
    
    @Mapper
    public interface PlanMapper {
        
        // 検索
        public List<Plan_search> daysearch(int day);
        
        // 更新
        public List<Plan_search> update(@Param("schedule") String schedule, @Param("day") String day);
        
        // 削除
        public List<Plan_search> delete(String schedule);
    
    }
    
[/code]

**Plan_search**

[code]

    package com.example.demo.entity;
    
    import lombok.Data;
    
    @Data
    public class Plan_search {
        private String day;
        private String schedule;
    
    }
    
[/code]

**plan.html**

[code]

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta charset="UTF-8">
    <link th:href="@{/css/style.css}" rel="stylesheet" type="text/css">
    <title>スケジュール</title>
    </head>
    <body>
    <form th:action="@{plan}" th:method="post">
    <table th:object="${Planlist}" class="plan_table">
    <tr>
    <th class="plan_th">スケジュール内容</th>
    <th class="plan_th">日付</th>
    </tr>
    <tr th:each="search : ${Planlist}">
    <td class="plan_td">
    <input type="text" name="schedule" size="50" th:value="${search.schedule}">
    </td>
    <td class="plan_td">
    <input type="text" name="day" size="10" th:value="${search.day}">
    </td>
    </tr>
    </table>
    <div>
    <p>
    <input type="submit" name="delete" value="削除">
    <input type="submit" name="edit" value="登録">
    <input type="submit" name="close" value="閉じる">
    </p>
    </div>
    </form>
    </body>
    </html>
    
[/code]


CC BY-SA 4.0
2021-08-27T08:54:34.870
81074
2021-08-31T06:28:37.580
2021-08-30T16:25:10.097
3060
47246
question
java spring-boot
Spring Bootで入力フォーム内の値をDB上に更新したい

[code]

    // 更新
        public List<Plan_search> update(@Param("schedule") String schedule, @Param("day") String day);
    
[/code]

PlanMapperにおいて、updateメソッドの型はListですが、updateの場合、戻り値はintのはずなので、一致するようにListからintに変更してみてください。


CC BY-SA 4.0
2021-08-31T06:28:37.580
81133
2021-08-31T06:28:37.580
35698
81074
answer