搜索
简帛阁>技术文章>面向 Java 程序员的 20 大 Spring REST 面试问题答案

面向 Java 程序员的 20 大 Spring REST 面试问题答案

前言:

大家好,过去几周我一直在分享一些 REST 与 Spring 教程,今天,我将分享一些常见的 Spring 和 REST 面试问题给申请 Web 开发人员角色的 Java 开发人员。由于 Spring 框架是开发 Java Web 应用程序和 RESTful Web 服务的最流行和标准框架,因此任何高级 Java 开发人员都希望对 Spring 核心和 Spring MVC 有很好的了解,但是如果工作描述中提到了 REST 和 Web 服务,您还需要了解如何使用 Spring Framework 开发 RESTful Web 服务。从 Spring 3.1 开始,该框架得到了很多增强,以支持开箱即用的 RESTFul API 所需的许多功能,例如
HTTPMessageConverter可以将您的 HTTP 响应转换为 JSON或 XML通过检测类路径中的相关库,例如 Jackson 和 JAXB。

Spring 还为 RESTful Web 服务提供了定制的注解,例如 @RestController它可以让你的控制器感知 REST,这样你就不需要做每个 REST API 所需的常见事情,例如将响应转换为 JSON。

在现实世界中开发和保护 RESTful Web 服务也必须具备良好的 Spring Security 知识。由于您无法在没有安全性的情况下使生活成为一个重要的 REST API,因此对安全基础知识(例如 HTTP 基本身份验证、摘要式身份验证、OAuth 和 JWT)的良好了解非常重要。

20 道 Spring REST Web 服务面试题

这里有几个关于在 Spring Framework 中使用 REST Web 服务的常见问题。
REST 代表什么? (回答)

REST 代表 REpresentational State Transfer,它使用 HTTP 协议将数据从客户端发送到服务器,例如服务器中的一本书可以使用 JSON 或 XML 传递给客户端。

什么是资源? (回答)

资源是数据在 REST 架构中的表示方式。通过将实体公开为资源,它允许客户端使用 HTTP 方法(例如GET、 POST、
PUT、DELETE 等)读取、写入、修改和创建资源 。

什么是安全的 REST 操作? (回答)

REST API 使用 HTTP 方法来执行操作。一些不修改服务器资源的 HTTP 操作称为安全操作,例如 GET 和 HEAD。另一方面, PUT、 POST 和 DELETE 是不安全的,因为它们会修改服务器上的资源。


什么是幂等操作?为什么幂等性很重要?(回答)

有一些 HTTP 方法,例如 GET,无论您使用多少次都会产生相同的响应,例如向同一个 URI 发送多个 GET 请求将导致相同的响应而没有任何副作用,因此它被称为幂等。

另一方面,POST 不是幂等的,因为如果您发送多个 POST 请求,它将导致在服务器上创建多个资源,但同样,如果您使用它来更新资源,PUT 是幂等的。

甚至,更新服务器上资源的多个 PUT 请求将给出相同的最终结果。

REST 是否可扩展和/或可互操作? (回答)

是的,REST 是可扩展和可互操作的。它不要求在客户端或服务器端选择特定的技术。您可以使用 Java、C++、Python 或 JavaScript 创建 RESTful Web 服务并在客户端使用它们。我建议你阅读一本关于 REST API 的好书,例如 RESTful Web Services,以了解更多关于 REST 的信息。

RestTemplate 的优点是什么? (回答)

该类RestTemplate 是 Spring 框架中模板方法模式的实现。与其他流行的模板类(例如JdbcTemplate or )类似JmsTempalte,它还简化了客户端与 RESTful Web 服务的交互。您可以使用它来非常轻松地使用 RESTful Web Servicer,如本示例所示。

REST 使用哪些 HTTP 方法? (回答)

REST 可以使用任何 HTTP 方法,但最流行的方法是用于检索资源的 GET、用于创建资源的 POST、用于更新资源的 PUt 和用于从服务器中删除资源的 DELETE。

HttpMessageConverter Spring REST 中的 a 是什么?(回答)

AnHttpMessageConverter 是一个 Strategy 接口,它指定一个转换器,该转换器可以在 HTTP 请求和响应之间进行转换。Spring REST 使用此接口将 HTTP 响应转换为各种格式,例如 JSON 或 XML。

每个HttpMessageConverter 实现都有一个或多个与之关联的 MIME 类型。Spring 使用“Accept”标头来确定客户端期望的内容类型。

然后它将尝试找到一个HTTPMessageConverter 能够处理该特定内容类型的注册并使用它将响应转换为该格式,然后再发送给客户端。

如何创建自定义实现HttpMessageConverter 以支持新类型的请求/响应? (回答)

您只需要创建一个实现
AbstractHttpMessageConverter 并使用该WebMvcConfigurerAdapter#extendMessageConverters()方法与生成新类型的请求/响应的类一起注册它。

REST 通常是无状态的吗? (回答)

是的,REST API 应该是无状态的,因为它基于也是无状态的 HTTP。REST API 中的请求应包含它处理所需的所有详细信息,即它不应依赖先前或下一个请求或在服务器端维护的某些数据,例如会话。REST 规范设置了一个约束以使其无状态,在设计 REST API 时应牢记这一点。

注释有什么作用@RequestMapping? (回答)

@RequestMapping注解用于将 Web 请求映射到 Spring Controller 方法。您可以根据 HTTP 方法映射请求,例如 GET 和 POST 以及各种其他参数。例如,如果您正在使用 Spring 开发 RESTful Web 服务,那么您可以使用生产和消费属性以及媒体类型注释来指示此方法仅用于生产或消费者 JSON,如下所示:

<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">@RequestMapping (method = RequestMethod.POST, consumes="application/json")</font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
公共图书保存(@RequestBody Book aBook){</font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   返回 bookRepository.save(aBook);</font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font>

您可以类似地创建其他处理程序方法来生成 JSON 或 XML。

@Controller 是刻板印象吗?@RestController 是刻板印象吗? ( 回答)

是的,两者 @Controller都是@RestController刻板印象。这 @Controller实际上是 Spring 的 @Component原型注解的一个特化。这意味着带有注释的类 @Controller也将被 Spring 容器自动检测到,作为容器组件扫描过程的一部分。

并且, @RestController是 @Controller针对 RESTful Web 服务的专门化。它不仅结合 @ResponseBody和@Controller注释,而且还赋予您的控制器类更多的意义,以清楚地表明它处理 RESTful 请求。

Spring Framework 未来也可能会使用这个注解来提供一些与 REST API 开发相关的更有用的特性。

@Controller和 和有什么不一样@RestController? (回答)

@Controller和r之间有很多区别 ,@RestControlle正如我之前的文章中所讨论的(请参阅答案),但最重要的是 @RestController您可以自动获取 @ResponseBody注释,这意味着您不需要使用 @ResponseBody注释单独注释处理程序方法。这使得使用 Spring 开发 RESTful Web 服务更加容易。你可以看这里学习

Spring MVC中什么时候需要@ResponseBody注解? (回答)

注释可以放在方法上,@ResponseBody以指示返回类型应直接写入 HTTP 响应正文(而不是放在模型中,或解释为视图名称)。

例如:

<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">@RequestMapping(path = "/hello", method = RequestMethod.PUT)</font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
@ResponseBody</font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
公共字符串 helloWorld() {</font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   返回“你好世界”;</font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font>

或者,您也可以使用@RestController注释而不是@Controller注释。这将消除使用的需要,@ResponseBody因为如上一个答案中所述,它会自动附带@RestController注释。

在 Spring MVC 中做了什么@PathVariable?为什么它在带有 Spring 的 REST 中很有用? (回答)

它是 Spring MVC 中有用的注释之一,它允许您从 URI 中读取值,例如查询参数。它在使用 Spring 创建 RESTful Web 服务的情况下特别有用,因为在 REST 资源标识符是 URI 的一部分。这个问题通常被问到有经验的 Spring MVC 开发人员,例如 4 到 6 年的经验。

比如在URL中
http://myapp.com/books/101如果要提取101的id,那么可以使用@PathVariableSpring MVC的注解。

成功的 DELETE 语句的 HTTP 状态返回码是什么? (回答)

对于成功删除后 REST API 应返回的状态代码没有严格的规定,即它可以返回 200 Ok 或 204 No Content。一般情况下,如果DELETE操作成功且响应体为空,则返回204。如果DELETE请求成功且响应体不为空,则返回200

CRUD 是什么意思? (回答)

CRUD 是创建、读取、更新和删除的缩写形式。在 REST API 中,POST 用于创建资源,GET 用于读取资源,
PUT用于更新资源,DELETE 用于从服务器中删除资源。这是另一个 Spring MVC 初学者级别的问题1到3年经验丰富的程序员

你在哪里需要@EnableWebMVC? (回答)

当@EnableWebMvc使用 Java 配置而不是 XML 配置 Spring MVC 时,启用 Spring MVC 需要注解。它相当于<mvc: annotation-driven>inXML 配置。

它支持用于将传入请求映射到处理程序方法的@Controller-annotated类。@RequestMapping

@ResponseStatusSpring MVC 什么 时候需要注解?(答案)
3 到 5 年经验丰富的 Spring 开发人员的好问题。在 Spring MVC 和 REST 中的 @ResponseStatus错误处理期间需要注释。通常,当服务器端抛出错误或异常时,Web 服务器会返回一揽子 HTTP 状态代码 500 – 内部服务器错误。

这可能适用于人类用户,但不适用于 REST 客户端。如果找不到资源,您需要向他们发送正确的状态代码,例如 404。这就是您可以使用@ResponseStatus注释的地方,它允许您发送自定义 HTTP 状态代码以及适当的错误消息,以防出现异常。

为了使用它,您可以创建自定义异常并使用@ResponseStatus注释和正确的 HTTP 状态代码和原因对其进行注释。

当此类异常从控制器的处理程序方法中抛出并且未在其他任何地方处理时,带有您设置的适当 HTTP 状态代码的适当 HTTP 响应将发送到客户端。

例如,如果您正在为提供书籍信息的图书馆编写 RESTful Web 服务,那么您可以使用@ResponseStatus创建异常,当找不到书籍时返回 HTTP 响应代码 404 而不是内部服务器错误 (500),如下所示:

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Book")  // 404
public class BookNotFoundException extends RuntimeException {
    // ...
}

如果从任何处理程序方法抛出此异常,则将向客户端返回 HTTP 错误代码 404,原因为“No such Book”。

REST 安全吗?你能做些什么来保护它? (回答)

这个问题主要是由经验丰富的 Java 程序员提出的,例如 2 到 5 年的 REST 和 Spring 经验。安全性是一个广义术语,它可能意味着通过加密或使用身份验证和授权提供的访问限制提供的消息安全性。REST 通常不安全,但您可以使用 Spring 安全性来保护它。

至少您可以通过在 Spring 安全配置文件中使用 HTTP 来启用 HTTP 基本身份验证。 同样,如果底层服务器支持 HTTPS ,您可以使用 HTTPS公开您的 REST API 。

REST 是否适用于传输层安全性 (TLS)? (回答)

TLS 或传输层安全用于客户端和服务器之间的安全通信。它是 SSL(安全套接层)的继承者。由于 HTTPS 可以与 SSL 和 TLS 一起使用,REST 也可以与 TLS 一起使用。

实际上,REST 说了任何关于安全性的内容,这取决于实现它的服务器。如果服务器支持SSL,则可以使用 HTTP 和 HTTPS 访问相同的 RESTful Web 服务 。

如果您使用的是 Tomcat,您可以查看此处以了解有关如何在 Tomcat 中启用 SSL 的更多信息。

您的类路径中是否需要 Spring MVC 来开发 RESTful Web 服务? (回答)

这个问题经常被问到有 1 到 2 年 Spring 经验的 Java 程序员。简短的回答是是的,您需要在 Java 应用程序的类路径中使用 Spring MVC 来使用 Spring 框架开发 RESTful Web 服务。它实际上是 Spring MVC,它提供了所有有用的注释,例如@RestController、@ResponseCode、@ResponseBody、@RequestBody和@PathVariable,因此您必须在 pom.xml 中使用 spring-mvc.jar 或适当的 Maven 条目

以上就是 针对初学者和经验丰富的 Java JEE 开发人员的一些常见的 Spring REST 面试问题。如果您要参加 Spring 认证,这些问题对于复习 Spring REST 知识也非常有用。如果您需要从 Spring 认证的角度提出更多问题,您会在 David Mayer 的Core Spring Simulator上找到很多关于此主题的问题,这 是目前通过 Spring 认证的最佳模拟器之一。

感谢您阅读本文,如果您喜欢本文,请与您的朋友和同事分享。如果您有任何未在此列表中回答的问题,请发表评论,我会尽力为您找到答案。

最后给大家分享Spring系列的学习笔记和面试题,包含spring面试题、spring cloud面试题、spring boot面试题、spring教程笔记、spring boot教程笔记、最新阿里巴巴开发手册(63页PDF总结)、2022年Java面试手册。一共整理了1184页PDF文档。私信博主(777)领取,祝大家更上一层楼!!!

录Q1:什么是springQ2:使用Spring框架好处是什么?Q3:使用Spring缺点是什么?Q4:IoC是什么?Q5:IOC优点是什么Q6:IoC容器初始化过程?Q7:依赖注实现方法有哪
REST风格/user/1get请求获取用户/user/1post请求新增用户/user/1put请求更新用户/user/1delete请求删除用户在SpringMVC中如何提交put和delete请
控制器处理HTTP4个主要方法GET,POST,PUT,DELETE使用@PathVariable注解获取URL中的参数importjavaxinjectInject;importjavaxval
今天博主将为大家分享一下Java面试必备):30个Java集合面试问题答案,不喜勿喷,如有异议欢迎讨论!Java集合框架为Java编程语言基础,也是Java面试中很重要一个知识点。这里,我列出
1什么是Spring框架?Spring框架有哪些主要模块?轻量级实现IoC和AOPJavaEE框架。Core模块:bean(bean定义创建解析),context(环境,IoC容器),core(核心
本文摘自javaweb轻量级开发面试教程:https://baikebaiducom/item/Java%20Web%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%BC%80%E5%8
1Java集合框架是什么?说出一些集合框架优点?每种编程语言中都有集合,最初Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合广泛使用,Java12提
本指南将向您展示如何轻松只需几个简单步骤即可实现SpringBoot应用国际化,从而总是在一个地方处理语言环境问题。我们将讨论如何在现有SpringBoot项目中添加国际化。当您处理应该为来自
文将介绍在RESTAPI中实现分页基础知识。我们将专注于使用SpringBoot和SpringData在SpringMVC中构建REST分页。分页是一种处理结果数据集机制。在RESTAPI中实
Java集合框架为Java编程语言基础,也是Java面试中很重要一个知识点。这里,我列出了一些关于Java集合重要问题答案。1Java集合框架是什么?说出一些集合框架优点?每种编程语言中都有