2016-11-18 359 views
3

我有关于此操作的更多信息。创建这个类控制器的工作原理:GetMapping和PostMapping注释

@Controller 
public class StudentController { 
@RequestMapping(value = "/student", method = RequestMethod.GET) 
public ModelAndView student() { 
return new ModelAndView("student", "command", new Student()); 
} 

@RequestMapping(value = "/addStudent", method = RequestMethod.POST) 
public String addStudent(@ModelAttribute("SpringWeb")Student student, 
ModelMap model) { 
model.addAttribute("name", student.getName()); 
model.addAttribute("age", student.getAge()); 
model.addAttribute("id", student.getId()); 
return "result"; 
} 

但使用GetMapping和PostMapping不工作,该项目正常运行,但不显示页面调用。 IE浏览器。 :

@Controller 
    public class StudentController { 

    @GetMapping("/student") 
    public ModelAndView student() { 
    return new ModelAndView("student", "command", new Student()); 
    } 

    @PostMapping("/addStudent") 
    public String addStudent(@ModelAttribute("SpringWeb")Student student, 
    ModelMap model) { 
    model.addAttribute("name", student.getName()); 
    model.addAttribute("age", student.getAge()); 
    model.addAttribute("id", student.getId()); 
    return "result"; 
    } 
} 

码满,远低于正常工作:

Student.java

public class Student { 

    private Integer age; 
    private String name; 
    private Integer id; 

    public Integer getAge() { 
     return age; 
    } 
    public void setAge(Integer age) { 
     this.age = age; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
} 

StudentController

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

@Controller 
public class StudentController { 

    @RequestMapping(value = "/student", method = RequestMethod.GET) 
    public ModelAndView student() { 
     return new ModelAndView("student", "command", new Student()); 
    } 

    @RequestMapping(value = "/addStudent", method = RequestMethod.POST) 
    public String addStudent(@ModelAttribute("SpringWeb") Student student, ModelMap model) { 
     model.addAttribute("name", student.getName()); 
     model.addAttribute("age", student.getAge()); 
     model.addAttribute("id", student.getId()); 
     return "result"; 
    } 
} 

result.jsp中

<%@ page language="java" contentType="text/html; charset=UTF-8" 
     pageEncoding="UTF-8"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Spring MVC Form Handling</title> 
</head> 
    <body> 
    <h2>Submitted Student Information</h2> 
     <table> 
     <tr> 
      <td>Name</td> 
       <td>${name}</td> 
      </tr>   
      <tr> 
       <td>Age</td> 
       <td>${age}</td> 
       </tr>  
       <tr> 
        <td>ID</td> 
        <td>${id}</td> 
        </tr> 
        </table> 
    </body> 
    </html> 

student.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Spring MVC Form Handling</title> 
</head> 
<body> 

    <h2>Student Information</h2> 
    <form:form method="POST" action="/HelloForm/addStudent"> 

    <table> 
    <tr> 
    <td><form:label path="name">Name</form:label></td> 
    <td><form:input path="name" /></td> 
    </tr> 

    <tr> 
    <td><form:label path="age">Age</form:label></td> 
    <td><form:input path="age"/></td> 
    </tr>     
    <tr> 
    <td><form:label path="id">ID</form:label></td> 
    <td><form:input path="id"/></td> 
    </tr> 

    <tr> 
    <td colspan="2"> 
    <input type="submit" value="Submit" /> 
</td> 
    </tr> 
     </table>    
    </form:form> 
</body> 
</html> 

SpringContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> 

<context:component-scan base-package="com" /> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
<property name="prefix" value="/WEB-INF/jsp/" /> 
<property name="suffix" value=".jsp"/> 

</bean> 

</beans> 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
    <display-name>HelloForm</display-name> 

    <servlet> 
    <servlet-name>HelloForm</servlet-name> 
    <servlet-class> 
org.springframework.web.servlet.DispatcherServlet 
</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>HelloForm</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 
+1

您使用哪个春季版?? – KLajdPaja

+0

我使用Spring 4.3.4。 –

+0

请提供[mcve]并准确解释您提出的要求,您期望的行为以及您实际获得的行为。 –

回答

1

在你SpringContext.xml文件,可以使用DefaultAnnotationHandlerMapping类(这是从Spring 3.2开始弃用)来处理@Reques隐式地注解注释,它不理解像@GetMapping,@ PostMapping ...(自4.3版本以来引入Spring)的新注释,所以它忽略了新的注释。为了使用新的注释,您应该使用RequestMappingHandlerMapping类。你可以像这样在你的SpringContext.xml简单地定义这个bean:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> 
<!-- you also need to define an adapter, otherwise you will get a ServletException while handling the request --> 
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> 

,但是推荐的方法是使用“MVC XML命名空间”,它会做以上为你工作。下面的代码添加到您的SpringContext.xml(应定义MVC命名空间在前):

<mvc:annotation-driven/> 

请参阅here有关更多细节。

0

您可以将@Controller更改为@RestController,然后使用@GetMapping和@PostMapping并运行代码。这应该工作。