복붙노트

[SPRING] @RequestMapping에서 @PathVariable [pathVars]를 찾을 수 없습니다. Spring MVC

SPRING

@RequestMapping에서 @PathVariable [pathVars]를 찾을 수 없습니다. Spring MVC

나는 봄에 다음과 같은 MVC 단지 내 초보자입니다 내 코드, 내가 다음과 같은 오류가 가서 안녕하려고 갈 때

Could not find @PathVariable [pathVars] in @RequestMapping Spring MVC

다음은 내 코드입니다.

package com.springapp.mvc;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import java.util.Map;

@Controller
public class HelloController {
    @RequestMapping("/")
    public String printWelcome(ModelMap model) {
        model.addAttribute("message", "Hello world!");
        return "hello";
    }
    @RequestMapping("/runThis/{bye}/{hye}")
    public ModelAndView printBye(@PathVariable Map<String,String> pathVars) {
        String Bye =  pathVars.get("bye");
        String Hye =  pathVars.get("hye");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", "you are"+Bye+ "AND Here COmes" +Hye+"!");
        return modelAndView;
    }
}

전체 스택을 편집하십시오.

type Exception report

message Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.springapp.mvc.HelloController.printBye(java.util.Map)]; nested exception is java.lang.IllegalStateException: Could not find @PathVariable [pathVars] in @RequestMapping

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.springapp.mvc.HelloController.printBye(java.util.Map)]; nested exception is java.lang.IllegalStateException: Could not find @PathVariable [pathVars] in @RequestMapping
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723)

root cause

org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.springapp.mvc.HelloController.printBye(java.util.Map)]; nested exception is java.lang.IllegalStateException: Could not find @PathVariable [pathVars] in @RequestMapping
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723)

root cause

java.lang.IllegalStateException: Could not find @PathVariable [pathVars] in @RequestMapping
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.resolvePathVariable(AnnotationMethodHandlerAdapter.java:859)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolvePathVariable(HandlerMethodInvoker.java:710)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:170)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.43 logs.

해결법

  1. ==============================

    1.dispatcher-servlet config xml에 가 필요합니다.

    dispatcher-servlet config xml에 가 필요합니다.

    또는 스프링 사용의 이후 버전

    Spring 구성 클래스의 @EnableWebMvc 주석

    @EnableWebMvc는 mvc : annotation-driven을 대체하기 위해 만들어졌습니다.

    xmlns가 올바른지 확인하십시오.

    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
                        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd     
                        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    
  2. ==============================

    2.이 코드 대신에 :

    이 코드 대신에 :

    public ModelAndView printBye(@PathVariable Map<String,String> pathVars) {
    

    그것을 다음과 같이 변경하십시오.

    public ModelAndView printBye(@RequestParam Map<String,String> pathVars) {
    

    왜냐하면 @RequestParam은 매개 변수로 전달 된 Map 객체를 처리하는 데 사용되지만 @PathVariable은 매개 변수로 전달되는 개별 항목을 처리하는 데 사용되기 때문입니다. 다음은 @PathVariable의 예입니다.

    public ModelAndView printBye(@PathVariable("bye") String Bye, @PathVariable("hye") String Hye) {
    
  3. ==============================

    3.요청 매핑을 사용하면 URL에 고정 부분 / runThis /와 두 개의 변수 부분 {bye} 및 {hye}이 있고 메소드의 두 매개 변수에 매핑되기를 원한다는 것을 나타냅니다. 다른 것을 나타냄).

    요청 매핑을 사용하면 URL에 고정 부분 / runThis /와 두 개의 변수 부분 {bye} 및 {hye}이 있고 메소드의 두 매개 변수에 매핑되기를 원한다는 것을 나타냅니다. 다른 것을 나타냄).

    그러나 당신의 방법에서는 pathVars라는 단일 매개 변수를 선언합니다. 따라서 매개 변수의 이름, 유형 및 수에 불일치가 있습니다. 이것이 Spring MVC가 불평하는 이유입니다.

    그래서 당신이 원하는 것은 :

    @RequestMapping("/runThis/{bye}/{hye}")
    public ModelAndView printBye(@PathVariable String bye, @PathVariable String hye) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", "you are" + bye + "AND Here COmes" + hye + "!");
        return modelAndView;
    }
    

    코드보다 더 간단하고 안전합니다. 그리고 문서를 읽으십시오. 이것은 아주 기본적인 예입니다.

  4. ==============================

    4.경우에 따라 ModelAndView (jspPageName) 문에서 jspPageName

    경우에 따라 ModelAndView (jspPageName) 문에서 jspPageName

    존재하지 않는 페이지를 가리키면 동일한 오류가 발생합니다.

    note 스프링 Mvc 4.2.4 및 JDK 8 사용

  5. from https://stackoverflow.com/questions/27970602/could-not-find-pathvariable-pathvars-in-requestmapping-spring-mvc by cc-by-sa and MIT license