0
点赞
收藏
分享

微信扫一扫

SpringMVC响应数据

东林梁 2023-01-24 阅读 159

返回值分类

字符串、void、转发和重定向、@ResponseBody响应json数据

 

字符串

controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。

Controller:

package com.qzcsbj.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ReturnController {
@RequestMapping("/testReturnString")
public String testReturnString() {
System.out.println("执行testReturnString方法。");
return "success";
}
}

  

直接访问:http://localhost:8080/testReturnString

SpringMVC响应数据_java

 

void

Servlet原始API可以作为控制器中方法的参数:

1、使用request转向页面

package com.qzcsbj.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
public class ReturnController {
@RequestMapping("/testReturnVoid")
public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("返回值是void");
request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,response);
}
}

 

2、通过response页面重定向

package com.qzcsbj.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
public class ReturnController {
@RequestMapping("/testReturnString")
public String testReturnString() {
System.out.println("执行testReturnString方法。");
return "success";
}

@RequestMapping("/testReturnVoid")
public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("返回值是void");
// request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,response);
// response.sendRedirect("/WEB-INF/jsp/success.jsp"); // 访问会报错
response.sendRedirect("testReturnString");
}
}

 

3、通过response指定响应结果,例如响应json数据:

package com.qzcsbj.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
public class ReturnController {
@RequestMapping("/testReturnVoid")
public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("返回值是void");
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("{\"code\":\"00\",\"msg\":\"成功\"}");
}
}

 

直接访问:http://localhost:8080/testReturnVoid

SpringMVC响应数据_System_02

 

转发和重定向

forward转发(最后url不会变)

controller方法在提供了String类型的返回值之后,默认就是请求转发。

也就是说,return "success";可以写成:

return "forward:/WEB-INF/jsp/success.jsp";

需要注意的是,如果用了formward:则路径必须写成实际视图url,不能写逻辑视图。 

不能写成:

return "forward:success.jsp";

也不能写成:

return "forward:success";

否则都会报404

SpringMVC响应数据_System_03

 

Redirect重定向(最后url会变)

contrller方法提供了一个String类型返回值之后,它需要在返回值里使用:redirect:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Hello, SpringMVC</h1>

<h1>${requestScope.username}</h1>
</body>
</html>

 

控制器

package com.qzcsbj.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
public class ReturnController {
@RequestMapping("/testReturnModelAndView")
public ModelAndView testReturnModelAndView() {
ModelAndView mv = new ModelAndView();
mv.addObject("username", "jack");
mv.setViewName("success");
return mv;
}

@RequestMapping("/testRedirect")
public String testRedirect() {
System.out.println("执行testRedirect方法。");
return "redirect:testReturnModelAndView";
}
}

 

注意,下面url变了

请求的是:http://localhost:8080/testRedirect

SpringMVC响应数据_java_04

 

@ResponseBody响应json数据

作用:该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json、xml等

Springmvc默认用MappingJacksonHttpMessageConverter对json数据进行转换,需要加入jackson的包。

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>

 

实体类

package com.qzcsbj.pojo;

import java.io.Serializable;


public class Account implements Serializable {
private static final long serialVersionUID = -7258686420068923807L;

private Integer id;
private String name;
private Float money;


public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Float getMoney() {
return money;
}

public void setMoney(Float money) {
this.money = money;
}

@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}';
}
}

 

控制器中的代码:

package com.qzcsbj.controller;

import com.qzcsbj.pojo.Account;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;


@Controller
public class ReturnJsonController {
@RequestMapping("/testResponseJson")
@ResponseBody
public Account testResponseJson(@RequestBody Account account){ // 通过@requestbody把json字符串封装到account对象中
return account;
}
}

 

启动tomcat,通过jmeter发送请求

SpringMVC响应数据_System_05

 

SpringMVC响应数据_spring_06

 

SpringMVC响应数据_spring_07

 


__EOF__


本文作者:持之以恒(韧)




举报

相关推荐

0 条评论