@Controller、@RestController注解区别详解

下面是关于“@Controller、@RestController注解区别详解”的完整攻略。

一、@Controller注解

@Controller是SpringMVC中常用的控制器注解,用于标记此类为控制器,能够处理用户的请求并返回相应的数据。

1.1 示例代码

@Controller
@RequestMapping("/hello")
public class HelloController {
    @RequestMapping("/world")
    public String sayHello() {
        return "hello world";
    }
}

上述代码定义了一个HelloController控制器处理/hello/world的请求,返回字符串"hello world"。

需要说明的是,@RequestMapping注解用来匹配请求路径。

1.2 返回值类型

@Controller控制器方法的返回值类型可以是字符串、ModelAndView或void类型。

如果是字符串类型,则对应视图名称;如果是ModelAndView类型,则可以传递视图名称和模型数据;如果是void类型,则需要配合@RequestMapping的produces属性使用,指定返回数据类型。

1.3 视图解析器

@Controller控制器返回字符串类型时,需要配合视图解析器处理视图。

在SpringMVC配置文件中,可以配置多个视图解析器,优先级按照配置的顺序逐个匹配。

示例配置:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

二、@RestController注解

@RestController是Spring4.0版本新增的注解,主要用于构建RESTful风格的API接口,一般情况下将返回数据直接作为响应体返回。

相比于使用@Controller注解,使用@RestController注解的控制器返回值不会被视图解析器解析,而是以JSON、XML等格式直接返回数据给客户端。

使用这个注解可以大大简化开发,并提高数据传输效率,常用于前后端分离的开发模式。

2.1 示例代码

@RestController
@RequestMapping("/api")
public class ApiController {
    @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) {
        User user = new User(id, "Tom", 18);
        return user;
    }
}

上述代码定义了一个ApiController控制器处理/api/user/{id}的GET请求,返回一个User对象。

需要说明的是,@PathVariable注解用于RESTful风格的URL路径参数获取。

2.2 返回值类型

@RestController控制器方法的返回值类型可以是任意Java类,SpringMVC会自动将该对象转化为JSON或XML格式返回给客户端。

同时,也可以使用@ResponseBody注解,将数据转化为JSON或XML格式返回。

2.3 内容协商 Content Negotiation

当使用@RestController注解时,在返回值类型为HttpEntity<T>时,可以通过controller方法中设置响应头来控制输出格式:

@GetMapping(value = "/{id}", produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
public HttpEntity<User> getUser(@PathVariable Long id) {
    User user = new User(id, "Tom", 18);
    return new ResponseEntity<User>(user, HttpStatus.OK);
}

由于Spring MVC使用了内容协商 Content Negotiation 来输出数据,我们还可以设置在请求头中 Accept 来控制输出数据的格式。

总结

@RestController相对于@Controller,主要是增加了对RESTful API的支持,也就是直接将返回结果作为json/xml输出给客户端,而不需要使用@ResponseBody来配合。

当我们需要返回数据时,如果是直接输出json/xml数据格式,那么应该使用 @RestController ;如果需要跳转页面,则应该使用 @Controller

以上是关于“@Controller、@RestController注解区别详解”的攻略,希望能对你有所帮助。

阅读剩余 54%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@Controller、@RestController注解区别详解 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Struts2 使用OGNL遍历map方法详解

    Struts2 中遍历 Map 对象 首先,我们需要在 Struts2 的 jsp 页面中通过<s:iterator>标签来遍历 Map 类型的对象。这个标签包含了一个 value 属性,用于读取 map 中的值,具体如下: <s:iterator value="myMap"> Key: <s:propert…

    Java 2023年6月15日
    00
  • MySQL示例讲解数据库约束以及表的设计

    “MySQL示例讲解数据库约束以及表的设计”是一篇比较综合性的文章,内容在开始之前应该分章节引出。以下是我根据自己的经验和理解对这个主题进行的完整攻略。 1. 关于数据库约束 “数据库约束”是指在创建数据库表时,针对表内字段相关的行为限制和处理措施。常见的数据库约束有NOT NULL约束、UNIQUE约束、PRIMARY KEY约束、FOREIGN KEY约…

    Java 2023年5月26日
    00
  • Java SpringSecurity+JWT实现登录认证

    下面我将为你详细讲解“Java SpringSecurity+JWT实现登录认证”的完整攻略。 首先,让我们一步步来实现一个基于SpringSecurity和JWT的用户登录认证系统。整个实现过程包括三个步骤: 集成SpringSecurity和JWT 配置SpringSecurity 实现登录接口 接下来,我们将分别对这三个步骤进行讲解。 1. 集成Spr…

    Java 2023年6月3日
    00
  • 使用SpringBoot配置https(SSL证书)

    使用 Spring Boot 配置 HTTPS (SSL 证书) 的完整攻略 在本文中,我们将详细介绍如何使用 Spring Boot 配置 HTTPS (SSL 证书)。我们将介绍 HTTPS 的概念、配置方式和提供两个示例。 HTTPS 概念 HTTPS (Hyper Text Transfer Protocol Secure) 是一种通过 SSL/TL…

    Java 2023年5月15日
    00
  • SpringBoot+SpringSecurity+jwt实现验证

    下面我会提供一个基于Spring Boot、Spring Security 和 JSON Web Token(JWT)的认证示例。 一、什么是JWT JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种简单的、自包含的方式,用于在通过网络进行传输的两个实体之间安全传递信息。它被称为自包含是因为JWT包含了所有身份验证(Aut…

    Java 2023年5月20日
    00
  • springboot中.yml文件参数的读取方式

    下面是关于springboot中.yml文件参数的读取方式的完整攻略。 1.参数的读取方式 在springboot中,我们可以使用yml文件作为配置文件,然后通过SpringBoot提供的@ConfigurationProperties注解将其中的配置值读取到Java对象中。yml文件中支持的数据类型包括字符串、数字、布尔等基本类型,以及对象类型等。 在ym…

    Java 2023年5月23日
    00
  • 浅谈几种Java自定义异常处理方式

    浅谈几种Java自定义异常处理方式 在Java中,异常是一种非常常见的错误类型,如果没有捕获和处理异常,程序很容易因为意外的错误而导致崩溃。Java允许我们自定义异常类型,来处理程序中特定的异常情况。本文将对几种Java自定义异常处理方式进行探讨,并提供示例代码来帮助读者加深对这些技术的理解。 自定义异常类 我们可以通过继承 Java 内置的异常类(Thro…

    Java 2023年5月20日
    00
  • 一文详解JavaWeb过滤器(Filter)

    一文详解JavaWeb过滤器(Filter) 什么是JavaWeb过滤器? JavaWeb过滤器(Filter)是一个可以拦截客户端与服务器之间的请求和响应的组件,它的作用就像一个保镖,协助我们控制和管理请求和响应。 过滤器的作用 过滤器可以用来完成以下功能: 认证用户访问权限 过滤违禁词汇和表情等内容 对请求或响应进行加密、压缩、解压 记录请求和响应信息 …

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部