localhost:8080/hello 에러 발생
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
안녕하세요. localhost:8080/hello 을 실행하면 whitelabelerror 500이 발생 합니다. 경로도 영어로 바꿨고, 코드도 확인했고, 실행 중인지도 확인 했는데 안 됩니다. 해결 방법이 궁금합니다.
- java
- spring
- mvc
- spring-boot
173만명의 커뮤니티!! 함께 토론해봐요.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
안녕하세요. localhost:8080/hello 을 실행하면 whitelabelerror 500이 발생 합니다. 경로도 영어로 바꿨고, 코드도 확인했고, 실행 중인지도 확인 했는데 안 됩니다. 해결 방법이 궁금합니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] package msj9965.project1.repository; import msj9965.project1.domain.Member; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import java.util.List; import static org.assertj.core.api.Assertions.*; class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @AfterEach public void afterEach(){ repository.clearStore(); } @Test public void save(){ //given Member member = new Member(); member.setName("spring"); //when repository.save(member); //then Member result = repository.findById(member.getId()).get(); assertThat(result).isEqualTo(member); } @Test public void findByName(){ //given Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); //when Member result = repository.findByName("spring1").get(); //then assertThat(result).isEqualTo(member1); } @Test public void findAll(){ //given Member member1 = new Member(); member1.setName("Spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("Spring2"); repository.save(member2); //when List<Member> result = repository.findAll(); //then assertThat(result.size()).isEqualTo(2); } } 위와 같이 MemoryMemberRepositoryTest을 작성했는데 테스트 코드 실행 시 아래와 같은 오류가 뜹니다. Execution failed for task ':test'. > Process 'Gradle Test Executor 14' finished with non-zero exit value 1 * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 1s 4 actionable tasks: 2 executed, 2 up-to-date
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 처음에 db delete 안 해주고 실행했을 때도 체크 표시가 떴고 delete 해주고 실행, db에서 회원 목록 조회하니 목록에 아무도 없습니다. test가 db에 연결이 안된 걸까요?
미해결
스프링 DB 1편 - 데이터 접근 핵심 원리
안녕하세요 @Bean PlatformTransactionManager transactionManager(){ return new DataSourceTransactionManager(dataSource()); } 테스트코드에서 이 로직을 제거해도 작동이 잘 되는데요 MemberServiceV3_3 클래스 에서 @Transactional 을 사용해서 트랜잭션 설정하는 로직이 필요없을것 같았는데 위 코드를 사용하신 이유가있으실까요?
해결됨
스프링 DB 1편 - 데이터 접근 핵심 원리
안녕하세요 h2 데이터베이스에 대한 질문이 있습니다. h2 데이터베이스는 "연결" 누르고 sql 실행할 수 있는 창에 들어왔다면 이게 데이터베이스 서버를 띄운건가요? 그럼 이 데이터베이스 창을 닫으면 자동으로 데이터베이스 서버를 다운시킨건가요? 그러니까 종료시킨건가요? 그럼 spring 실행을 시킬때 항상 이 h2 데이터베이스에 연결해서 접속한다음에 실행해야하는건가요? 그리고 현재는 저 한명만이 h2로 테스트하는거니까 그냥 계속 Embedded mode로 접속해도 되는거죠? 감사합니다.
미해결
장고 설계철학으로 시작하는 파이썬 장고 입문
화면과같이 include 부분 강좌와 다르게 저절로 세팅이 되고 서버 실행하면 계속 오류가나는데 어떻게해야하나요ㅜㅜ
해결됨
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
김영한님께서 추천하신 강의 순서는 이미 확인하였습니다. 해당 순서대로 mvc1편 듣고 있습니다.(이해가 완전히 잘 되었던 유일한 http 강의를 제외하고는) 모든 강의가 50%정도의 이해, 50% 정도는 그냥 따라치기에 급급한 느낌이 듭니다. 강의가 온전히 이해되지 않으니, 강의를 듣고 따라치는 과정에서 '나는 절대 저 코드를 혼자서는 못 만들 것 같다'라는 생각이 자연스럽게 듭니다. 저는 현재 강의 내용이 이해가 잘 안 되더라도 흐름만 파악하며 일단 끝까지는 들어보자라는 생각으로 강의를 수강하고 있는데요, 이해가 잘 안 되면 오래걸리고 되돌아가면서라도 실시간으로 코드까지 이해를 완전 다 하면서 듣는 방식을 추천하시나요? 비슷한 얘기일 수 있지만, 제가 이해가 덜 된 상태로 완강한 강의들을 다시 복습하는게 좋을까요? 결국 나중에는 복습을 하긴 하겠지만, 일단 끝까지 계속 진도를 나가며 모든 로드맵 완강 후 그제서야 다시 복습을 하는게 맞을까요? 아니면 현재 시점까지는 이제 스탑하고 처음 스프링 입문부터 복습을 먼저 한 후에 이어서 진도를 나가는 것이 맞을까요? 추가로, 아직 제가 듣는 강의에서는 내가 저 기술을 유용히 쓸 수 있겠다 라는 생각이 잘 안 들어서 더 힘든 것 같은데, 조금 더 실질적으로 잘 쓰이는 영역의 강의를 먼저 골라들어보고 싶습니다.. '스프링 입문 → 스프링 핵심원리-기본편 → HTTP 기본 지식 → 김영한 스프링 MVC 1편' 까지 수강중인데 추후 바로 '자바 ORM 표준 JPA프로그래밍-기본편 → 실전 스프링 부트와 JPA 활용1 → 실전 스프링 부트와 JPA 활용2' 이렇게 먼저 들어도 될까요? +) 강의를 모두 완강하신 누구든 답변해주시면 감사하겠습니다:)
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[질문 내용] 안녕하세요 해당 강의에서 LoginCheckFilter 구현 중에 try - catch 코드에서 질문이 있어서 글을 남깁니다. catch (Exception e) { throw e; // 예외 로깅 가능하지만 , 톰캣까지 예외를 보내주어야 함. } 부분이 이해가 가질 않습니다. 톰캣까지 예외를 보내줘야하는 이유를 모르겠네요. 그리고 try 구문 내에서 return으로 다음을 진행하지 않고 끝을 내는 부분도 잘 와닿지 않습니다. 제가 예외 처리 부분 개념이 약한 거 같은데, 위에 질문 드린 내용들을 뭐라고 검색하고 공부하면 좋을까요?
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 먼저 올해도 spring강의 수강생들과 강사님 모두 새해 복 많이 받으시길 기원합니다 제가 질문드리고싶은 사항은 th:field=*{regions} 를 통해서 id,name값을 설정하는 부분입니다 addForm에서는 item.regions에 아무런 값이 없는데도 불구하고 id를 th: each 문에 맞춰서 regions1,2,3 를 타임리프가 알아서 단순히 텍스트로 생성해주는 건가요?? addform에서는 분명 데이터가 없을텐데 저렇게 id가 생성되는 이유가 궁금해서 질문 드립니다
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, 우선 좋은 강의에 감사드립니다. 다름이 아니라, 강의를 듣는 도중 멀티 체크박스를 정의하는 과정에서 #ids.prev('regions') 부분에서 이해가 되지 않았습니다. th:each 를 사용하는 경우 id에 1, 2, 3과 같은 숫자를 붙여 regions1, regions2.. 와 같이 만드는데, 왜 #ids.prev 에선 'regions' 를 입력으로 넣는지가 이해가 되지 않았습니다. (뿐만 아니라 전체 흐름을 조금 더 명확하게 이해하고 싶었습니다.) 구글링을 해봤는데, 해당 강의에 대한 블로그 정리는 많지만 제가 원하는 내용은 찾지를 못했습니다..ㅜㅜ 그래서, 이번 기회에 소스코드를 찾아보며 이해를 해보려고 했는데, 아래 작성된 과정이 맞는지, 제가 잘 이해한게 맞는지가 궁금하여 질문 드리게 되었습니다. 너무나도 긴 질문이라 미리 죄송하다는 말씀 드립니다.. 다음 코드는 SpringInputCheckboxFieldTagProcessor 클래스의 doProcess() 와, AbstractSpringFIeldTagProcess 클래스의 computeId() 메서드 입니다. protected void doProcess(ITemplateContext context, IProcessableElementTag tag, AttributeName attributeName, String attributeValue, IThymeleafBindStatus bindStatus, IElementTagStructureHandler structureHandler) { String name = bindStatus.getExpression(); name = name == null ? "" : name; String id = this.computeId(context, tag, name, true); // 이하 생략.. } protected final String computeId(ITemplateContext context, IProcessableElementTag tag, String name, boolean sequence) { // 이전 부분 생략.. if (sequence) { Integer count = context.getIdentifierSequences().getAndIncrementIDSeq(id); return id + count.toString(); } } computeId() 를 보면, sequence 인 경우(→ 이 경우는 th:each가 들어간 경우라고 추측합니다.) Id에 count 를 붙여서 반환하도록 되어있습니다. 2. IdentifierSequences 클래스 public final class IdentifierSequences { private final Map<String, Integer> idCounts = new HashMap(1, 1.0F); public IdentifierSequences() { } public Integer getAndIncrementIDSeq(String id) { Validate.notNull(id, "ID cannot be null"); Integer count = (Integer)this.idCounts.get(id); if (count == null) { count = 1; } this.idCounts.put(id, count + 1); return count; } public Integer getPreviousIDSeq(String id) { Validate.notNull(id, "ID cannot be null"); Integer count = (Integer)this.idCounts.get(id); if (count == null) { throw new TemplateProcessingException("Cannot obtain previous ID count for ID \\"" + id + "\\""); } else { return count - 1; } } } IdentifierSequences 클래스를 보면, idCounts 라는 Map에 id와 count 정보를 저장하고, 1에서의 computeId() 는 getAndIncrementIDSeq() 를 통해 count 정보를 얻어냅니다. 이 세부 과정을 생각해보면, 처음에 th:field=”*{regions}” 를 통해 regions라는 id가 들어가면 IdentifierSequences 클래스의 Map<String, Integer> idCounts 에는 regions라는 id가 없어 getAndIncrementIDSeq() 의 count값은 1이 됩니다. this.idCount.put(id, count + 1); 을 통해 idCounts에는 {”regions” : 2} 가 저장되며, getAndIncrementIDSeq() 가 반환하는 count값은 1이 됩니다. 즉, 처음에 regions라는 id가 들어가면, 이는 <input> 태그에는 regions1이라는 id로 지정되지만 IdentifierSequence 의 idCount 맵에는 count가 2로 되어있는 상태입니다. IDs 클래스 public class Ids { private final ITemplateContext context; public String prev(Object id) { Validate.notNull(id, "ID cannot be null"); String str = id.toString(); return str + this.context.getIdentifierSequences().getPreviousIDSeq(str); } public Ids(ITemplateContext context) { Validate.notNull(context, "Context cannot be null"); this.context = context; } } 그러면 #ids.prev(’regions’) 를 통해 label이 regions1 로 등록되는 과정은 다음과 같이 이해할 수 있을 것 같습니다. prev 메서드는 id를 입력받아, IdentifierSequence 의 getPreviousIDSeq() 을 호출하여 얻은 숫자를 뒤에 붙여 label의 id를 지정합니다. 이전 문단의 IdentifierSequence 의 getPreviousIDSeq() 코드를 보면, idCount에서 얻은 count에 1을 빼서 반환합니다. idCount에는 count가 2로 지정되어 있기에, 최종적으로 #ids.prev(’regions’)의 결과는 regions1이 됩니다. 활용 : #ids.next 의 사용 <label th:for="${#ids.next('regions')}" th:text="${region.value}" class="form-check-label">서울</label> <input type="checkbox" th:field="*{regions}" th:value="${region.key}" class="form-check-input"> label과 input 태그의 위치를 바꾸고 #ids.next를 사용하면, 이전과 같이 label의 for와 input의 id를 일치시킬 수 있습니다. 결과는 다음과 같습니다. <!-- multi checkbox --> <div> <div>등록 지역</div> <div class="form-check form-check-inline"> <label for="regions1" class="form-check-label">서울</label> <input type="checkbox" value="SEOUL" class="form-check-input" id="regions1" name="regions"><input type="hidden" name="_regions" value="on"/> </div> <div class="form-check form-check-inline"> <label for="regions2" class="form-check-label">부산</label> <input type="checkbox" value="BUSAN" class="form-check-input" id="regions2" name="regions"><input type="hidden" name="_regions" value="on"/> </div> <div class="form-check form-check-inline"> <label for="regions3" class="form-check-label">제주</label> <input type="checkbox" value="JEJU" class="form-check-input" id="regions3" name="regions"><input type="hidden" name="_regions" value="on"/> </div> </div> 세부 과정을 보면 다음과 같습니다. public String next(Object id) { Validate.notNull(id, "ID cannot be null"); String str = id.toString(); return str + this.context.getIdentifierSequences().getNextIDSeq(str); } next()는 IdentifierSequences 의 getNextIDSeq() 를 통해 count 정보를 얻습니다. public Integer getNextIDSeq(String id) { Validate.notNull(id, "ID cannot be null"); Integer count = (Integer)this.idCounts.get(id); if (count == null) { count = 1; } return count; } getNextIDSeq() 를 보면, idCounts에 id가 없는 경우 1을 반환합니다. 즉, 처음에 #ids.next(’regions’) 가 입력되면, getNextIDSeq() 는 1을 반환하기에 첫 번째 label은 for=’regions1’ 이 됩니다. 다음 과정은 2번 문단에 적은 세부 과정과 동일한데, 이전의 #ids.prev에서와 달리 #ids.next는 count에 1을 뺀 값이 아닌 count 그대로 를 반환하므로, #ids.prev를 사용할 때와 같이 for와 id가 일치된다고 생각할 수 있습니다. 읽어주셔서 감사드립니다. 새해 복 많이 받으세요!(질문 작성일이 설 당일이라.. 겸사겸사 인사드립니다!)
미해결
스프링 DB 2편 - 데이터 접근 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 7:56에서 하신 테스트를 실행했을 때 강의에서는 정상적으로 동작했지만 저는 오류 발생하며 테스트가 정상적으로 되지 않습니다. 오류 로그 테스트 코드에서 item3이 무슨 이유인지 모르지만 같이 넘어가서 문제가 되는 것으로 보입니다. 왜 이럴까요?
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 회원가입을 했는데 로그인에서 널포인트가 터지는데 회원저장소의 문제인거같은데 뭐가 문제인지 잘 모르겠습니다 https://drive.google.com/file/d/1gjPbYTN4X-ozjYDISGWff1BvvFdNOfen/view?usp=sharing
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
영상처럼 포트번호가 떠야하는데 사진 처럼 WARNING이 출력되면서 연결이 안 되는 것 같습니다. localhost:8080 으로 사이트에 접속해도 연결이 안 되었음을 확인했습니다. 어쩌면 좋을까요? 다음은 스프링 부트 설정입니다. 인텔리제이는 ultimate버전입니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] mac에서 현재 강의를 따라하고 있는데 빌드를 종료하면서 다시 한번 실행해보려고 했더니 포트가 이미 사용중이라고 합니다.그래서 죽이고 다시 실행해서 켰는데 혹시 빌드를 종료하면서 포트번호도 같이 죽이는 명령어(단축키)가 있을까요?
미해결
스프링 프레임워크는 내 손에 [스프1탄]
0오류는 Memeber 를 정의할때 Int age; 말고 null타입이 들어갈 수 있는 Integer 타입으로 정의하면 되지않을까 제안드리는데 , 굳이 0으로 할 필요가 있을까요 ? Integer age ; 시 기본값이 null 이니깐 문제없지 않을까요
해결됨
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] @ResponseBody @RequestMapping("/model-attribute-v1") public String modelAttributeV1(@ModelAttribute HelloData helloData) { log.info("username = {}, age = {}", helloData.getUsername(), helloData.getAge()); return "ok"; } 강의 내용대로 작성했고 HelloData도 마찬가지로 똑같이 작성했습니다. 그리고 웹 브라우저로 http://localhost:8080/model-attribute-v1?username=a&age=abc 이렇게 의도적으로 age에 문자열을 넣었는데요 저도 당연히 BindException이 나올 줄 알았는데 MethodArgumentNotValidException가 뜹니다. 구글링해 보니 BindException이랑 MethodArgumentNotValidException이 생기는 원인은 좀 다른 것 같은데 왜 전 코드가 강의랑 비슷한데도 예외가 다르게 나올까요? +) 오류 메시지입니다. 2024-02-10T17:28:59.250+09:00 WARN 17376 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public java.lang.String hello.springmvc.basic.request.RequestParamController.modelAttributeV1(hello.springmvc.basic.HelloData): [Field error in object 'helloData' on field 'age': rejected value [abc]; codes [typeMismatch.helloData.age,typeMismatch.age,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [helloData.age,age]; arguments []; default message [age]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'age'; For input string: "abc"]] ]
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 꾸준하게 강의 들어온 학생입니다. 개강이 얼마 안남아서 jpa로 실제 웹서비스 구현하는 것까지 해보고싶은데 db커리큘럼을 잠깐 건너뛰고 수강해도될까요? 물론 나증에 추가로 들을 예정입니다.
해결됨
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] request.getParameter()의 결과는 항상 String이라고 이해하고 있습니다. 즉, request.getParameter("age")도 String이기 때문에 int로 변환하려면 다음처럼 Integer.parseInt()를 사용했었습니다. int age = Integer.parseInt(request.getParameter("age")); 그런데 이번 시간에 작성한 다음 코드에서 @ResponseBody @RequestMapping("/request-param-map") public String requestParamMap(@RequestParam Map<String, Object> paramMap) { log.info("username = {}, age = {}", paramMap.get("username"), paramMap.get("age")); return "ok"; } @RequestParam Map<String, Object> paramMap 여기선 Object로 써져 있는데, 실무에서 Object로 써야만 하는 경우도 있나요? 제가 생각한 게 맞다면 파라미터의 값이 코드에서 String로 쓰이든 int로 쓰이든 간에, Map에선 모두 String 값으로 존재할 것 같았는데(age의 경우도 20이 아닌 "20"인 상태로 이해했습니다.) <String, String>이 아닌 <String, Object>로 써야만 하는 경우도 실제로 있는지 궁금합니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강사님하고 동일한 방식으로 진행했는데 localhost:8080/hello에서 에러가 발생하네요;;; 이유와 함께 해결방안에 대해서 알고 싶습니다
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] findByName() 메서드를 다음과 같이 구현해도 되나요? 중복 이름의 회원이 없다고 했기 때문에 굳이 List로 받을 필요가 있나 싶어서요.