发表于: 2017-06-20 20:59:35
1 1142
今日完成:
学习SpirngMVC请求参数和页面传参的方法
写一个返回给前端的json数据字符串
学习计划:
重构任务2到任务5,并掌握所需的知识点,要求可以敲出来出来。
明天计划:
任务2:创建WEB工程,提供Rest风格数据接口。
收获:
在jsp中写返回json数据的步骤:
1.在pom里加入依赖
<dependency>
<groupId>3rdparty</groupId>
<artifactId>json-taglib</artifactId>
<version>0.4.1</version>
</dependency>
2.在jsp中加入标签
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
3.json接收参数格式
<json:object>
<json:array name="内门弟子" var="student" items="${list}">
<json:object>
<json:property name="姓名" value="${student.stu_name}"/>
<json:property name="宣言" value="${student.sign}"/>
<json:property name="介绍人" value="${student.stu_introducer}"/>
<json:property name="创建时间" value="${student.create_at}"/>
<json:property name="更新时间" value="${student.update_at}"/>
</json:object>
</json:array></json:object>
在JSP中
${}被称为EL表达式,可以取到服务器的各种作用域里面的值。
c:foreach是jsp的一个迭代标签,用于循环一个集合。
var是指定到javabean中的一个类
items是指定存储列表数据的一个集合,上面遍历循环变量list这个集合,把循环的数据存在变量student中。
4.返回到页面的字符串
{
"内门弟子": [
{
"姓名": "童志荣",
"宣言": "这个很懒,什么都没写",
"介绍人": "老大最帅",
"创建时间": 20170503,
"更新时间": 20170619,
},
]
}
Spring MVC中如何匹配请求路径:
@RequestMapping是用来映射请求的,比如get请求,post请求,或者REST风格与非Rest风格的该注解可以用在类上或者方法上,用在类上表示该类中所有方法等父路径。
RequestMapping可以实现模糊匹配路径比如:
? 匹配一个字符
* 匹配任意字符
** 匹配多层路径
/springmvc/**/lastTest就可以匹配/springmvc/firstTest/secondTest/lastTest这样的路径
@PathVariable用来映射请求URL中绑定的占位符。通过@PathVariable可以将URL中占位符的参数绑定到controller处理方法的入参中
举个栗子:
@RequestMapping(“/testPathVariable/{id}”)
public String testPathVariable(@PathVariable(value=“id”Int id){
System.out.println(“testPathVariable:”+id);
return SUCCESS”
获取一个参数,需要在方法上加入testPathVariable/{id},关于{id}的具体对应在该方法的参数中,通过@PathVariable(value=“id”)来声明要接收的请求参数,并通过int id来绑定和接收。通过该种方式,我们就可以得到前台页面请求的参数。
@RequestParam
请求参数是以键值对出现的,我们通过@RequestParam来获取到具体请求值
比如:
@RequestMapping(value="/testRequestParam")
public String testRequestParam(@RequestParam(value="username") String username, @RequestParam(value="age", required=false) int age){
System.out.println("testRequestParam" + " username:" + username + " age:" +age);
return SUCCESS;
}
这里@RequestParam注解可以用来提取名为“username”的String类型和名为"age"的int类型的参数,并将之作为输入参数传入。 @RequestParam常用来处理简单类型转换
该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定
遇到问题:
在Controller中写了两个查询方法,一个根据id查询,一个是根据姓名查询。下面红色的URL虽然占位符的参数不一样
@RequestMapping(value = "/list/{stu_name}", method = RequestMethod.GET)
public String findStudentByName(@PathVariable(value = "stu_name") String stu_name, Model model) {
@RequestMapping(value = "/list/{id}", method = RequestMethod.GET)
public String finStudentById(@PathVariable(value = "id") int id, Model model) {
但是路径是相同的。这时运行项目会报映射重复导致的错误.
java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path '/getPrams': {public java.lang.String cn.ps.spring.controller.MainController.getJson(), public org.springframework.web.servlet.ModelAndView cn.ps.spring.controller.MainController.getPrams()}. If you intend to handle the same path in multiple methods, then factor them out into a dedicated handler class with that path mapped at the type level!
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodResolver.resolveHandlerMethod(AnnotationMethodHandlerAdapter.java:600)
解决办法:修改路径名
@RequestParam该注解在什么情况下需要呢?访问带参数的URL?
评论