发表于: 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:foreachjsp的一个迭代标签,用于循环一个集合。

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}的具体对应在该方法的参数中,通过@PathVariablevalue=“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?





返回列表 返回列表
评论

    分享到