인프런 커뮤니티 질문&답변

신승록님의 프로필 이미지
신승록

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

수업 자료

기본객체들 404

해결된 질문

작성

·

380

·

수정됨

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

신승록님의 프로필 이미지
신승록
질문자

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

어떤 이유인지는 모르겠으나 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입니다.

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

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

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

image

감사합니다.

신승록님의 프로필 이미지
신승록
질문자

메뉴얼 확인했습니다.

메뉴얼 하단

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

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

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

신승록님의 프로필 이미지
신승록

작성한 질문수

질문하기