11在SpringMVC中响应到浏览器的数据格式,@ResponseBody注解和@RestController复合注解的功能详解

本文主要是介绍11在SpringMVC中响应到浏览器的数据格式,@ResponseBody注解和@RestController复合注解的功能详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

响应数据/转发或重定向页面

参考文章数据交换的常见格式,如JSON格式和XML格式

服务器将接收到请求处理完以后需要将处理结果告知给浏览器即响应,通常有响应要转发/重定向到的页面响应数据(文本数据/json数据)两种方式

  • 如果控制器方法返回值类型为void并且没有通过response对象设置响应体,此时前端控制器会以请求映射的路径作为控制器方法返回的视图名称

响应字符串

在控制器方法中通过response对象的API响应数据到浏览器

<a th:href="@{/testResponse}">通过servletAPI的response对象响应浏览器数据</a><br>
@RequestMapping("/testResponse")
public void testResponse(HttpServletResponse response) throws IOException {// 将打印的信息作为响应报文的响应体响应到浏览器response.getWriter().print("hello,response");
}

@ResponseBody注解的作用是将控制器方法的返回值作为响应报文的响应体响应到浏览器, 此时控制器方法的返回值不再经过视图解析器解析也就不会发生页面跳转

  • @RequestMapping注解的produces属性: 设置控制器方法响应给浏览器数据的类型以及编码类型(解决中文乱码问题),即设置响应头Content-Type的值
<a th:href="@{/testResponseBody}">通过@ResponseBody响应浏览器数据</a><br>
// 响应英文
@RequestMapping("/testResponseBody")
@ResponseBody
public String testResponseBody(){// 浏览器页面显示success,不再跳转页面return "success";
}
// 响应中文会有乱码乱码问题,可以使用produces属性设置编码类型,也可以在SpringMVC的配置文件中设置编码过滤器
@RequestMapping(value = "/testResponseBody", produces = "text/html;charset=UTF-8")
@ResponseBody
public String testResponseBody(){return "成功";
}

在SpringMVC的配置文件中解决响应中文乱码的问题

<!-- 开启mvc注解驱动 -->
<mvc:annotation-driven><mvc:message-converters><!-- 处理响应中文内容乱码 --><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="defaultCharset" value="UTF-8" /><property name="supportedMediaTypes"><list><value>text/html</value><value>application/json</value></list></property></bean></mvc:message-converters>
</mvc:annotation-driven>

响应对象/集合

需求: 因为服务器并不能直接响应一个Java对象给浏览器,我们可以先将Java对象转换为json对象格式的字符串,然后使用@ResponseBody注解响应到浏览器

第一步: 导入jackson的依赖

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

第二步: 在SpringMVC的核心配置文件中开启mvc的注解驱动

<mvc:annotation-driven />

第三步: 在控制器方法上使用@ResponseBody注解进行标识,然后就可以将Java对象直接作为控制器方法的返回值返回

  • HandlerAdaptor中会自动装配一个消息转换器
  • MappingJackson2HttpMessageConverter,可以将响应到浏览器的Java对象自动转换为json格式的对象
<a th:href="@{/test/ResponseBody/json}">通过@ResponseBody响应浏览器User对象</a><br>
@RequestMapping("/test/ResponseBody/json")
@ResponseBody
public User testResponseUser(){return new User(1001,"admin","123456",23,"男");
}
//浏览器的页面中展示的结果: {"id":1001,"username":"admin","password":"123456","age":23,"sex":"男"}

响应List集合对象时会将list集合转换成json数组

@RequestMapping("/test/ResponseBody/json")
@ResponseBody
public List<User> toJsonList(){List<User> users = new ArrayList<User>();User user1 = new User();user1.setName("马文");user1.setAge(27);users.add(user1);User user2 = new User();user2.setName("马武");user2.setAge(28);users.add(user2);return users;//浏览器的页面中展示的结果: [{“name”:”马文”,”age”:27,”address”:null},{“name”:”马武”,”age”:28,”address”:null}]
}

响应Map集合时会将map集合转换成json对象

@RequestMapping("/test/ResponseBody/json")
@ResponseBody  
public Map<String, Object> testResponseBodyJson(){User user1 = new User(1001, "admin1", "123456", 20, "男");User user2 = new User(1002, "admin2", "123456", 20, "男");User user3 = new User(1003, "admin3", "123456", 20, "男");Map<String, Object> map = new HashMap<>();map.put("1001", user1);map.put("1002", user2);map.put("1003", user3);return map;
}

@RestController复合注解

@RestController注解是SpringMVC提供的标识在控制器类上的复合注解

  • @RestController注解作用是为该控制器类添加@Controller注解,同时为类中每个控制器方法上都添加@ResponseBody注解
@RestController
// 自动添加@Controller
public class HttpController {@RequestMapping("/testRestController")// 自动添加@ResponseBodypublic String testRestController(String username, String password){// 响应success字符串到浏览器,不再跳转页面return "success";}
}

这篇关于11在SpringMVC中响应到浏览器的数据格式,@ResponseBody注解和@RestController复合注解的功能详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/197888

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�