• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

기본객체들 404

23.12.18 17:54 작성 23.12.18 17:55 수정 조회수 296

1

스프링MVC 기본객체들 강의 학습중인데요

404가 나오네요 소스 자체를 복붙해도 404가 나오는데 원인을 모르겠습니다 스프링은 3.2.0 버전사용하고 있고

아래는 소스코드 입니다

BasicController

package hello.thymeleaf.basic;

import jakarta.servlet.http.HttpSession;
import lombok.Data;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Controller
@RequestMapping("/basic")
public class BasicController {

    @GetMapping("text-basic")
    public String textBasic(Model model) {
        model.addAttribute("data", "Hello Spring!");
        return "/basic/text-basic";
    }

    @GetMapping("text-unescaped")
    public String textUnescaped(Model model) {
        model.addAttribute("data", "<b>Hello Spring!</b>");
        return "/basic/text-unescaped";
    }

    @GetMapping("/variable")
    public String variable(Model model) {
        User userA = new User("userA", 10);
        User userB = new User("userB", 20);

        List<User> list = new ArrayList<>();
        list.add(userA);
        list.add(userB);

        Map<String, User> map = new HashMap<>();
        map.put("userA", userA);
        map.put("userB", userB);

        model.addAttribute("user", userA);
        model.addAttribute("users", list);
        model.addAttribute("userMap", map);
        return "basic/variable";
    }

    @Data
    static class User {
        private String username;
        private int age;

        public User(String username, int age) {
            this.username = username;
            this.age = age;
        }

        @GetMapping("/basic-objects")
        public String basicObjects(HttpSession session) {
            session.setAttribute("sessionData", "Hello Session");
            return "basic/basic-objects";
        }

        @Component("helloBean")
        static class HelloBean {
            public String hello(String data) {
                return "Hello " + data;
            }
        }
    }
}

basic-objects

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<h1>식 기본 객체 (Expression Basic Objects)</h1>
<ul>
  <li>request = <span th:text="${request}"></span></li>
  <li>response = <span th:text="${response}"></span></li>
  <li>session = <span th:text="${session}"></span></li>
  <li>servletContext = <span th:text="${servletContext}"></span></li>
  <li>locale = <span th:text="${#locale}"></span></li>
</ul>
<h1>편의 객체</h1>
<ul>
  <li>Request Parameter = <span th:text="${param.paramData}"></span></li>
  <li>session = <span th:text="${session.sessionData}"></span></li>
  <li>spring bean = <span th:text="${@helloBean.hello('Spring!')}"></span></li>
</ul>
</body>
</html>

index.html

<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul>
    <li>텍스트
        <ul>
            <li><a href="/basic/text-basic">텍스트 출력 기본</a></li>
            <li><a href="/basic/text-unescaped">텍스트 text, utext</a></li>
        </ul>
    </li>
    <li>표준 표현식 구문
        <ul>
            <li><a href="/basic/variable">변수 - SpringEL</a></li>
            <li><a href="/basic/basic-objects?paramData=HelloParam">기본 객체들</a></li>
            <li><a href="/basic/date">유틸리티 객체와 날짜</a></li>
            <li><a href="/basic/link">링크 URL</a></li>
            <li><a href="/basic/literal">리터럴</a></li>
            <li><a href="/basic/operation">연산</a></li>
        </ul>
    </li>
    <li>속성 값 설정
        <ul>
            <li><a href="/basic/attribute">속성 값 설정</a></li>
        </ul>
    </li>
    <li>반복
        <ul>
            <li><a href="/basic/each">반복</a></li>
        </ul>
    </li>
    <li>조건부 평가
        <ul>
            <li><a href="/basic/condition">조건부 평가</a></li>
        </ul>
    </li>
    <li>주석 및 블록
        <ul>
            <li><a href="/basic/comments">주석</a></li>
            <li><a href="/basic/block">블록</a></li>
        </ul>
    </li>
    <li>자바스크립트 인라인
        <ul>
            <li><a href="/basic/javascript">자바스크립트 인라인</a></li>
        </ul>
    </li>
    <li>템플릿 레이아웃
        <ul>
            <li><a href="/template/fragment">템플릿 조각</a></li>
            <li><a href="/template/layout">유연한 레이아웃</a></li>
            <li><a href="/template/layoutExtend">레이아웃 상속</a></li>
        </ul>
    </li>
</ul>
</body>
</html>

링크

여기서 막혀서 학습을 못하고 있어요 ㅠㅠ 도와주세요

답변 2

·

답변을 작성해보세요.

1

신승록님의 프로필

신승록

질문자

2023.12.19

저와 같이 고생하시는 분 계실까 싶어 공유 해드립니다

어떤 이유인지는 모르겠으나 static class를 getMapping 보다 내리니 문제가 해결되었습니다.

package hello.thymeleaf.basic;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.Data;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Controller
@RequestMapping("/basic")
public class BasicController {

    @GetMapping("text-basic")
    public String textBasic(Model model) {
        model.addAttribute("data", "Hello Spring!");
        return "/basic/text-basic";
    }

    @GetMapping("text-unescaped")
    public String textUnescaped(Model model) {
        model.addAttribute("data", "<b>Hello Spring!</b>");
        return "/basic/text-unescaped";
    }

    @GetMapping("/variable")
    public String variable(Model model) {
        User userA = new User("userA", 10);
        User userB = new User("userB", 20);

        List<User> list = new ArrayList<>();
        list.add(userA);
        list.add(userB);

        Map<String, User> map = new HashMap<>();
        map.put("userA", userA);
        map.put("userB", userB);

        model.addAttribute("user", userA);
        model.addAttribute("users", list);
        model.addAttribute("userMap", map);
        return "basic/variable";
    }
        @GetMapping("/basic-objects")
        public String basicObjects(Model model, HttpServletRequest request,
                                   HttpServletResponse response, HttpSession session) {
            session.setAttribute("sessionData", "Hello Session");
            model.addAttribute("request", request);
            model.addAttribute("response", response);
            model.addAttribute("servletContext", request.getServletContext());
            return "basic/basic-objects";
        }
    @GetMapping("/date")
    public String date(Model model) {
        model.addAttribute("localDateTime", LocalDateTime.now());
        return "basic/date";
    }
    @Data
    static class User {
        private String username;
        private int age;

        public User(String username, int age) {
            this.username = username;
            this.age = age;
        }
        @Component("helloBean")
        static class HelloBean {
            public String hello(String data) {
                return "Hello " + data;
            }

        }
    }
}

0

OMG님의 프로필

OMG

2023.12.18

안녕하세요. 신승록님, 공식 서포터즈 OMG입니다.

스프링부트 3.0.x부터 변경사항이 있습니다. 해당 챕터 메뉴얼을 확인해주세요.

강의 제작 시점 이후 변경사항은 메뉴얼 혹은 자주하는 질문에 정리되어 있습니다.

학습에 참고 부탁드립니다 😀

image

감사합니다.

신승록님의 프로필

신승록

질문자

2023.12.18

메뉴얼 확인했습니다.

메뉴얼 하단

3.0에서 적용되는 사항들을 복사해서

"스프링 부트 3.0 이상이라면 다음과 같이 작성하자."

라는 부분적용해서 작성했음에도 404가 나옵니다. 추가로 말씀해주신 부분 ${#}이부분은 전부 변경되었고(locale)제외 이부분때매 안나오는 가 싶어 해당부분 주석하였음에도 동일하게 404페이지가 나옵니다 그외 더 참고할 수 있는 사항이 있을까요?