Spring Web MVC 响应消息

   日期:2020-08-29     浏览:164    评论:0    
核心提示:Spring MVC 返回页面与返回数据讲解。

1.1 响应内容





1.2 跳转页面

1.2.1 返回字符串

添加视图解析器(spring-mvc.xml)

<!-- 视图解析器 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<!-- 前缀 -->
    <property name="prefix" value="/WEB-INF/views/"/>
    <!-- 后缀 -->
    <property name="suffix" value=".jsp"/>
</bean>

请求方法


@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public String get() {
        return "success";
    }
}


说明

  视图解析器会自动给我们请求方法中返回的字符串加上前缀和后缀组成完整的转发地址,直接返回资源名称 success 的等同于返回 forward:/WEB-INF/views/success.jsp 即请求转发,如果想要重定向需要返回 redirect:/index.jsp,加了前缀之后不会经过视图解析器。注意,外部是无法直接访问 WEB-INF 下的页面,只有通过服务器转发才可以,所以重定向不要指到 WEB-INF 下。

  另外,如果转发的页面是 HTML,并且 DispatcherServlet 拦截配置为 / ,为了实现 REST 风格,拦截了所有的请求,*.js*.html 等静态文件的访问也就被拦截了,需要放行静态资源。


1.2.2 返回 ModelAndView

概述

  使用 ModelAndView 类用来存储处理完后的结果数据,以及显示该数据的视图。顾名思义 ModelAndView 中的 Model 代表模型,View 代表视图。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的 model 中,把要返回的视图信息存储在 view 中,然后将 ModelAndView 返回。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最终把数据显示在指定的页面上。

请求方法


@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public ModelAndView get() {
    	// 也可以在方法形参上直接声明 ModelAndView, 无需自己创建
        ModelAndView modelAndView = new ModelAndView();
        // 设置数据
        modelAndView.addObject("name", "张三");
        // 设置视图名称
        modelAndView.setViewName("success");
        return modelAndView;
    }
}

JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>success</title>
</head>
<body>
	${name}
</body>
</html>


1.2.3 返回为空

  当请求方法返回为空时,MVC 会自动将请求资源路径 demo/success 拼接上前缀和后缀做为请求转发的地址。


@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/success")
    public void get() {
        System.out.println("我来了");
    }
}





1.3 响应数据

1.3.1 直接返回字符串


@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    @ResponseBody
    public String get() {
        return "Hello";
    }
}



1.3.2 返回 JSON 字符串


@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    @ResponseBody
    public String get() {

        Map<String, String> map = new HashMap<>();
        map.put("name", "jack");
        map.put("age", "20");

        String json = JSONObject.toJSONString(map);
        return json;
    }
}



1.3.2 返回对象


@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    @ResponseBody
    public Student get() {

        Student student = new Student();
        student.setName("Tom");
        student.setAge(23);

        return student;
    }
}

  这里直接报错了,这个错误的原因是 Spring Web MVC 会帮我们将对象转为 JSON 然后返回,而 Spring Web MVC 底层默认使用的 jackjson,我们并没有引入 jackjson 所以就报错了,引入之后就 OK 了。

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



1.3.3 @RestController


@RestController		// @RestController 这个注解其实就是 @ResponseBody 和 @Controller 注解的组合
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public String get() {

        return "10086";
    }
}

1.3.4 返回中文乱码

  在 Spring Web MVC 中 StringHttpMessageConverter 这个转换器,父类AbstractHttpMessageConverter 的 supportedMediaTypes 属性默认是 iso-8895-1 导致中文乱码。有两种解决方案,第一个是在配置文件中指定转换器使用的字符集,第二个是在 @RequestMapping 中指定 produces 属性。

<mvc:annotation-driven>
	<mvc:message-converters>
		<bean class="org.springframework.http.converter.StringHttpMessageConverter">
			<property name="supportedMediaTypes" value="text/html;charset=utf-8"></property>
		</bean>
	</mvc:message-converters>
</mvc:annotation-driven>
@ResponseBody
@GetMapping(value = "/get", produces = "application/json;charset=utf-8")
public String get() {}



 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服