SpringMVC方法的返回值类型和自动装配

1、 void类型作为返回值类型

/**
 * 如果方法写成了void就跟原来servlet含义是差不多 的
 * json
 */
@RequestMapping("/firstRequest")
public void firstRequest(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {
    UserInfo info=new UserInfo();
    info.setUserid(1);
    info.setUserName("李四");
    /**
     * json格式传递
     */
    response.setCharacterEncoding("UTF-8");
    String value= JSON.toJSONString(info);
    response.getWriter().write(value);
}

代码实现

2 、String类型作为返回值类型

/**
 * 返回值类型为String时,一般用于返回视图名称
 * 1、当方法返回值为null时,默认将请求路径当做视图   forward:/jsp/index.jsp       如果说没有视图解析器,返回值为null携带数据只能用json
 * 2、当方法返回一个String的字符串时,当字符串为逻辑视图名时只返回视图,如果携带数据则使用request,session或者json
 * 3、当方法返回值加入forward时代表转发,如果写为redirect:xxxx代表重定向,不是返回视图了,但是不会这样做!!
 */
@RequestMapping("/secondRequest")
public String secondRequest(HttpServletRequest request, HttpServletResponse response){
    request.setAttribute("user","张三");
    return "forward:/jsp/index.jsp";
}

代码实现

3、 Object类型作为返回值类型

/**
 *Object
 * 1.当方法返回值为null时,默认将请求路径当作视图  jsp/objectRequest.jsp  如果没有视图解析器,如果返回值为null携带数据只能用json
 * 2.当方法返回值为String类型字符串时,就是视图的逻辑名称
 * 3.当返回对象或者集合数据时要使用json格式字符串,可选fashjson手动转换 ,也可以使用jackson自动转换
 */
@RequestMapping("/ObjectRequest")
@ResponseBody
public Object ObjectRequest(){
    List<UserInfo> userInfoList=new ArrayList<>();
    UserInfo userInfo=new UserInfo();
    userInfo.setUserid(111);
    userInfo.setUserName("鸭头一号");
    UserInfo userInfo1=new UserInfo();
    userInfo1.setUserid(222);
    userInfo1.setUserName("鸭头二号");
    userInfoList.add(userInfo);
    userInfoList.add(userInfo1);
    return userInfoList;
}

代码实现

4、 ModelAndView类型作为返回值类型

/**
 * ModelAndView
 * @param request   请求对象
 * @param response  响应对象
 * @return    ModelAndView  model是用来传递数据用的,view是所需要跳转的页面
 */
@RequestMapping("/model")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){
    ModelAndView modelAndView=new ModelAndView();
    //携带给页面数据
    modelAndView.addObject("user","鸭头");
    //指定跳转页面(视图解析器配置前后缀)
    modelAndView.setViewName("index");
    return modelAndView;
}

代码实现

5、 请求参数的自动类型转换

  5.1.1 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆</title>
</head>
<body>
<form action="/fourth/oneRequest" method="post">
    账户:<input type="text" name="userName"/>
    密码:<input type="password" name="userpwd"/>
    <input type="submit" value="登陆"/>
</form>
</body>
</html>

代码实现

  5.1.2 Controller

(控制器Controller中的方法参数名称必须和表单元素的name属性值保持一致)

@Controller
@RequestMapping("/fourth")
public class FourthController {

    /**
     * 1、请求参数的自动类型转换
     * @param userName
     * @param userpwd
     * @param model
     * @return
     * 控制器Controller中的方法参数名称必须和表单元素的name属性值保持一致
     */
    @RequestMapping(value = "/oneRequest")
    public String oneRequest(String userName,String userpwd, Model model){
        System.out.println(userName+"\t"+userpwd);
        model.addAttribute("userCode",userName);
        return "welcome";
    }

}

代码实现

5.2 RequestMethod.POST

  5.2.1 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆</title>
</head>
<body>
<form action="/fourth/twoRequest" method="post">
    账户:<input type="text" name="userName"/>
    密码:<input type="password" name="userpwd"/>
    <input type="submit" value="登陆"/>
</form>
</body>
</html>

代码实现

  5.2.2 Controller

(此处必须设置请求类型,否则会显示405错误)

/**
 * 2、RequestMethod.POST 此处必须设置请求类型 否则将会显示405错误
 * @param userName
 * @param userpwd
 * @param model
 * @return
 *  控制器Controller中的方法参数名称必须和表单元素的name属性值保持一致
 */
@RequestMapping(value = "/twoRequest",method = RequestMethod.POST)
public String twoRequest(String userName,String userpwd, Model model){
    System.out.println(userName+"\t"+userpwd);
    model.addAttribute("userCode",userName);
    return "welcome";
}

代码实现

5.3 @RequestParam注解

  5.3.1 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆</title>
</head>
<body>
<form action="/fourth/formRequest" method="post">
    账户:<input type="text" name="userName"/>
    密码:<input type="password" name="userpwd"/>
    <input type="submit" value="登陆"/>
</form>
</body>
</html>

代码实现

  5.3.2 Controller

/**
 * [email protected] 注解
 * 接收零散参数:装配原则为传递参数名和方法接收参数名一致
 * defaultValue默认值   required代表是否必须传递
 * @RequestParam 注解
 */
@RequestMapping(value = "/formRequest")
public String formRequest(@RequestParam(name = "userName",defaultValue = "鸭头") String userName, @RequestParam(name = "userpwd")String userpwd, Model model){
    System.out.println(userName+"\t"+userpwd);
    model.addAttribute("userCode",userName);
    return "welcome";
}

代码实现

5.4 RESTFUL风格的参数传递

  5.4.1 Controller

/**
 * 4、RESTFUL 风格的参数传递
 * get请求时,如果需要传递参数,那么则把不能使用以往的方式?name=xxx&age=yy,但是现在要遵循restful风格,例:xxx/ttt/ddd
 * 根据地址栏url匹配拿值  使用@PathVariable(name=地址栏中的参数映射)
 */
@RequestMapping("/restfulRequest/{b}/{d}")
public String restfulRequest(@PathVariable(name = "b") String usercode, @PathVariable(name = "d")String userpwd){
    System.out.println(usercode+"\t"+userpwd);
    return "welcome";
}

代码实现

5.5 对象参数

  5.5.1 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆</title>
</head>
<body>
<form action="/fourth/Info" method="post">
    账户:<input type="text" name="userName"/>
    密码:<input type="password" name="userpwd"/>
    <input type="submit" value="登陆"/>
</form>
</body>
</html>

代码实现

  5.5.2 Controller

/**
 * 5、对象参数
 */
@RequestMapping(value = "/Info")
public String UserRequest(UserInfo info){
    System.out.println(info.getUserName());
    return "welcome";
}

代码实现

5.6 域属性对象参数

  5.6.1 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆</title>
</head>
<body>
<form action="/fourth/userInfoRequest" method="post">
    老师一号:<input type="text" name="teacher.teacherName"/>
    <input type="submit" value="登陆"/>
</form>
</body>
</html>

代码实现

  5.6.2 Controller

/**
 * 6、域属性对象参数
 */
@RequestMapping(value = "/userInfoRequest")
public String UserInfoRequest(UserInfo info){
    System.out.println(info.getTeacher().getTeacherName());
    return "welcome";
}

代码实现

5.7 域属性集合参数

  5.7.1 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆</title>
</head>
<body>
<form action="/fourth/userInfoRequest" method="post">
    老师二号:<input type="text" name="teacherList[0].teacherName"/>
    老师三号:<input type="text" name="teacherList[1].teacherName"/>
    <input type="submit" value="登陆"/>
</form>
</body>
</html>

代码实现

  5.7.2 Controller

/**
 * 7、域属性集合参数
 */
@RequestMapping(value = "/userListRequest")
public String UserListRequest(UserInfo info){
    System.out.println(info.getTeacherList());
    return "welcome";
}

代码实现

 

原文地址:https://www.cnblogs.com/Zzzzn/p/11827131.html

时间: 2024-11-05 16:03:26

SpringMVC方法的返回值类型和自动装配的相关文章

Spring MVC方法的返回值类型

一,String类型作为返回值类型 返回值类型为String时,一般用于返回视图名称 1.当方法返回值为Null时,默认将请求路径当做视图 /jsp/thread/secondRequest.jsp 如果说没有试图解析器,如果返回值为Null携带数据只能用JSON 2.当方法返回一个String的字符串时,当字符串为逻辑视图名时只返回视图,如果要携带数据则使用request,session或者Json 如果要用Model或者ModelMap传递数据,那么Model或者ModelMap绝对是方法入

java方法重写返回值类型

重写(Overriding)(1) 父类与子类之间的多态性,对父类的函数进行重新定义.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding).在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法.但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写.方法重写又称方法覆盖.(2)若子类中的方法与父类中的某一方法具有相同的方法名.返回类型和参数表,则新方法将覆盖原有的方法.如需父类中原有的方法,可使用super关键字

012-关于EditText中的getText()方法的返回值类型以及string的转换问题(转)

原文链接:https://blog.csdn.net/mattdong0106/article/details/10139389 EditText中的getText()方法的返回值为CharSequence,如果我们想要获得string类型数据的话,需要在后边加上.toString 另外,String类型转为int:Integer.parseInt(str); String类型转为float:Float.parseFloat(str); string和Date的相互转换: DateFormat

springmvc 之 处理方法的返回值类型

1. void: 并且没有使用servletapi进行跳转,那么默认会将请求名作为试图名进行跳转. @RequestMapping("/login") public void login(User user){ } 结果: void: 在参数中使用了servletapi,并且在方法中使用servletapi进行了跳转.那么按照servletapi跳转的位置进行跳转. @RequestMapping("/login") public void login(HttpSe

怀疑:如果方法的返回值类型是引用类型的话,那么返回的就是地址。

缘由: "A property method may require additional memory or return a reference to somethingthat is not actually part of the object's state, so modifying the returned object has noeffect on the original object; querying a field always returns a reference

MyBatis中Mapper的返回值类型

insert.update.delete语句的返回值类型 对数据库执行修改操作时,数据库会返回受影响的行数. 在MyBatis(使用版本3.4.6,早期版本不支持)中insert.update.delete语句的返回值可以是Integer.Long和Boolean.在定义Mapper接口时直接指定需要的类型即可,无需在对应的<insert><update><delete>标签中显示声明. 对应的代码在 org.apache.ibatis.binding.MapperMe

函数式接口作为参数和作为返回值类型的案列

package com.itheima.demo3.LambdaTest; /** * @author newcityman * @date 2019/8/3 - 22:15 * 使用java.lang.Runnable接口作为参数,同时使用Lambda进行传参 */public class Demo01Runnable { // 定义一个方法startThread,方法的参数就是函数式接口Runnable public static void startThread(Runnable run)

正确理解Java方法的返回值

首先来看一段代码 我们把这段代码称为代码①,接下来我们再来看另外一段代码 我们把这段代码称为代码②.在代码①当中,定义了一个方法,这个方法声明的返回值类型是double,而实际通过return关键字返回的却是一个int型的值,但并没有引起编译错误.而在代码②当中,情况正好相反,方法声明的返回值类型是int,方法内部的return关键字实际返回了一个double类型的值,在这种情况下,编译器却报出了语法错误.对比一下这两种情况,很多初学Java的小伙伴搞不清:为什么同样是方法声明的返回值类型与实际

11.SpringMVC注解式开发-处理器方法的返回值

处理器方法的返回值 使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型 1.ModelAndView 2.String 3.void 4.自定义类型对象 1.返回ModelAndView 若处理器方法处理完后,需要跳转到其他资源,且又要在跳转的资源间传递数据,此时处理器方法 返回ModelAndView比较好.当然,若要返回ModelAndView,则处理器方法中需要定义ModelAndView对象 在使用时,若该处理器方法只是进行跳转而不传递数据或只是传递数据而不向