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

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

Spring还为RESTful Web服务提供了自定义的注释,例如@ RestController ,它可以使Controller知道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 ,
放入 ,删除等

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

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


什么是幂等运算? 幂等为什么重要? ( 回答 )

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

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

甚至,多个PUT请求更新服务器上的资源也会得到相同的最终结果。

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

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

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

RestTemplate类是Spring框架中Template方法模式的实现。 与其他流行的模板类(例如JdbcTemplateJmsTempalte ,它还简化了与客户端RESTful Web服务的交互。 您可以使用它很容易地使用RESTful Web Servicer,如本示例所示。

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

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

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

HttpMessageConverter是一个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 Service,则可以使用Produces和consumers属性以及媒体类型注释来指示此方法仅用于产生或使用JSON,如下所示:

@RequestMapping (method = RequestMethod.POST, consumes="application/json")
public Book save(@RequestBody Book aBook) {return bookRepository.save(aBook);
}

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

@Controller是构造型吗? @RestController是构造型吗? ( 回答 )

是的, @Controller @RestController@RestController都是@RestController型。 @Controller实际上是Spring的@Component型注释的一种特殊形式。 这意味着在容器的组件扫描过程中,Spring容器也会自动检测带有@Controller注释的类。

并且, @RestController是用于RESTful Web服务的@Controller的特殊化。 它不仅结合了@ResponseBody@Controller注释,而且还为您的控制器类赋予了更多含义,以清楚地表明它处理RESTful请求。

Spring框架也可以使用此注释来提供一些将来与REST API开发相关的更有用的功能。

@Controller@RestController什么@RestController ( 回答 )

正如我在较早的文章中所讨论的, @Controller @RestControlle@RestControlle r之间有很多区别(请参见答案),但是最重要的是,使用@RestController可以自动获得@ResponseBody批注,这意味着您无需单独进行批注。您的带有@ResponseBody批注的处理程序方法。 这使得使用Spring可以更轻松地开发RESTful Web服务。 你可以看到这里学习

在Spring MVC中何时需要@ResponseBody注释? ( 回答 )

可以在方法上放置@ResponseBody批注,以指示应将返回类型直接写到HTTP响应主体(而不是放置在Model中或解释为视图名称)。

例如:

@RequestMapping(path = "/hello", method = RequestMethod.PUT)
@ResponseBody
public String helloWorld() {return "Hello World";
}

另外,您也可以使用@RestController注释代替@Controller注释。 这将消除使用@ResponseBody的需要,因为如上一个答案中所述,它自动带有@RestController批注。

Spring MVC中的@PathVariable有什么作用? 为什么在带有Spring的REST中有用? ( 回答 )

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

例如,如果要提取101 ID,则在URL http://myapp.com/books/101 ,可以使用Spring MVC的@PathVariable注释。

成功的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? (回答)

当使用Java配置而不是XML配置Spring MVC时,需要@EnableWebMvc注释才能启用Spring MVC。 它等效<mvc: annotation-driven>in XML配置中的<mvc: annotation-driven>in

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

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

这可能适用于人类用户,但不适用于REST客户端。 如果找不到资源,则需要向他们发送正确的状态代码,例如404。 在这里可以使用@ResponseStatus批注,该批注允许您发送自定义HTTP状态代码以及异常情况下的正确错误消息。

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

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

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

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

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

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服务? ( 回答 )

经常向在Spring拥有1到2年经验的Java程序员提出这个问题。 简短的答案是,您需要Java应用程序的类路径中的Spring MVC才能使用Spring框架开发RESTful Web服务。 它实际上是Spring MVC中提供所有有用的注解如@RestController@ResponseCode@ResponseBody@RequestBody@PathVariable ,因此必须用弹簧mvc.jar或在你的pom.xml适当的Maven项

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

您可能喜欢的其他Spring教程和资源

  • 5个免费课程,用于学习Core Spring和Spring Boot
  • Spring MVC框架如何工作?
  • Spring Security中的基本身份验证如何工作?
  • Spring中DispatcherServlet的作用是什么?
  • Spring中@ Service,@ Controller和@Component之间有什么区别
  • Baeldung的REST with Spring认证课程

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

翻译自: https://www.javacodegeeks.com/2018/02/top-20-spring-rest-interview-questions-answers-java-programmers.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你还认识变量吗?Java基础学习不可略过的基本语法,简而不漏,变量的定义赋值和分类,系统认识Java中的变量有哪些?

文章目录变量的声明和赋值变量分类变量的声明和赋值 class VariableTest{public static void main(String[] args) {//变量的定义int myAge 21;//变量的使用System.out.println(myAge);//变量的声明int myNumber;//变量的赋值myNumber 9090;} }特别注意&#xff1a; ①定义变…

地图统计_庄园地图“出镜率”排名,500场数据统计,红教堂第一

在11赛季的时候很多玩家都私信趣游君&#xff0c;他们感觉自己排位经常会遇到一些让人讨厌的地图&#xff0c;也是因为经常遇到这些地图&#xff0c;所以导致自己的排位赛迟迟无法上分&#xff0c;因为要求我们做一下地图出镜率的排名。为了完成这个刷剧统计&#xff0c;趣游君…

2018安徽省计算机一级试题答案,2018年计算机等一级考试试题100题及参考答案.docx...

2018年计算机等一级考试试题100题及参考答案.docx文档编号&#xff1a;395397文档页数&#xff1a;14上传时间&#xff1a; 2018-09-03文档级别&#xff1a;精品资源文档类型&#xff1a;docx文档大小&#xff1a;28.84KB2018 年 计算机等一级考试试题 100 题 及参考答案 1. 在…

简自动类型提升,精度损失类型强制转换,常用转义字符,简单帮你回顾Java基本数据类型整形浮点型字符型布尔型Boolean及其运算规则

文章目录整形浮点型字符型布尔型boolean自动类型提升强制类型转换注意整形 bit是计算机中的最小存储单位。 byte是计算机中的基本存储单元。 1MB1024KB——1KB1024B&#xff08;byte&#xff09; public class JavaTest {public static void main(String[] args) {byte b1 1…

linux posix 线程池_linux多线程--POSIX Threads Programming

linux多线程自己从接触很久也有不少实践&#xff0c;但总是觉得理解不够深刻&#xff0c;不够系统。借这篇文章试着再次系统学习一下linux多线程编程&#xff0c;理解编程的concept&#xff0c;细致看一下POSIX pthread API的实现。还是凭借强大的google search&#xff0c;找到…

计算机相关货品类别,工业计算机的种类以及产品供应链

(文章来源&#xff1a;OFweek)因为工业计算机几乎是针对某种特定需求而生&#xff0c;它的型态可说是五花八门&#xff0c;如果要简单做个分类&#xff0c;可以工业计算机的类型与层级来区分。大致上有板卡、子系统与系统整合解决方案三种。板卡&#xff1a;又有单板计算机(Sin…

Java基本语法(6)--算术运算符

除号&#xff08;/&#xff09;要注意的是除数与被除数的数据类型。如果都是整型&#xff0c;那么结果还是一个整型&#xff0c;因此结果相当于是取整&#xff1b;如果至少有一浮点型&#xff0c;那么结果是浮点型&#xff0c;也就可以除到完整彻底&#xff0c;带小数点的。 前…

soapui 证书_SoapUI入门之附件上传和配置Https请求

已经欠了一堆的作业了&#xff0c;吼吼~拖延症是个大bug&#xff0c;废话不多说&#xff0c;马上进入咱们SoapUI的学习中来吧~现在开始我们的SoapUI集成测试学习之道&#xff1a;一、如何使用SoapUI进行附件上传做人还是不能这样&#xff0c;这不欺负银嘛。首先&#xff0c;我们…

pptv手机端html,影视资源持续更新,PPTV手机化身看片神器

移动终端的快速发展为人们的生活带来了多元化的娱乐享受&#xff0c;用手机观赏电影逐渐成为人们放松身心的重要选择之一。虽然在手机品牌呈井喷发展的态势下&#xff0c;支持观影的智能手机不在少数&#xff0c;要想突出重围&#xff0c;仅仅在硬件配置上做文章是远远不够的&a…

Java基本语法(8)--比较运算符

比较运算符的结果都是boolean型&#xff0c;也就是要么是true&#xff0c;要么是false。 注意 和 之分。

win7计算机管理找不到文件夹,Win7系统打开组策略提示找不到文件gpedit.msc怎么办...

组策略是Windows系统管理员为用户和计算机定义并控制程序、网络资源及操作系统行为的主要工具&#xff0c;不过有win7旗舰版系统用户在打开组策略的时候&#xff0c;却提示“找不到文件gpedit.msc&#xff0c;请确定文件名是否正确后&#xff0c;再试一次”&#xff0c;该如何解…

mysql 授权用户_MySQL创建用户与授权

一. 创建用户命令:CREATE USER usernamehost IDENTIFIED BY password;说明&#xff1a;username&#xff1a;你将创建的用户名host&#xff1a;指定该用户在哪个主机上可以登陆&#xff0c;如果是本地用户可用localhost&#xff0c;如果想让该用户可以从任意远程主机登陆&#…

Java基本语法(9)--逻辑运算符(逻辑短路)与或非

逻辑与——&——都为true才为true&#xff0c;有一false就为false&#xff0c;符号两边都看 短路与——&&——都为true才为true&#xff0c;有一false就为false&#xff0c;前面有false就略后面 逻辑或——|——有一true就为true&#xff0c;符合两边都看 短路或—…

计算机管理设置,win10系统打开计算机管理的设置步骤

win10系统使用久了&#xff0c;好多网友反馈说关于对win10系统打开计算机管理设置的方法&#xff0c;在使用win10系统的过程中经常不知道如何去对win10系统打开计算机管理进行设置&#xff0c;有什么好的办法去设置win10系统打开计算机管理呢&#xff1f;在这里小编教你只需要 …

Java基本语法(10)--位运算符

位运算符的使用对象是数&#xff0c;位运算是直接对整数的二进制进行的运算&#xff0c;理解必须要在二进制层面进行。 功能说明&#xff1a; 每<<左移1位&#xff0c;乘一次2&#xff08;低位补0&#xff09; 每>>右移一位&#xff0c;除一次2&#xff0c;符号位…

jsp servlet示例_Servlet和JSP中的文件上传示例

jsp servlet示例使用Servlet和JSP将文件上传到服务器是Java Web应用程序中的常见任务。 在对Servlet或JSP进行编码以处理文件上传请求之前&#xff0c;您需要了解一点有关HTML和HTTP协议中文件上传支持的知识。 如果要让用户从文件系统中选择文件并上传到服务器&#xff0c;则需…

功能Java示例 第3部分–不要使用异常来控制流程

这是称为“ Functional Java by Example”的系列文章的第3部分。 我在本系列的每个部分中发展的示例是某种“提要处理程序”&#xff0c;用于处理文档。 在前面的部分中&#xff0c;我从一些原始代码开始&#xff0c;并应用了一些重构来描述“什么”而不是“如何”。 为了帮助…

安全模式打开计算机策略,安全模式下怎么解除组策略的锁定?

2006-01-13注册表被锁住了&#xff0c;组策略也被禁用&#xff0c;安全模式也进不了&#xff0c;该如何修改注册表随便从网络上下在一个注册表编辑器,展开[hkey-current-user\software\microsoft\windows\current version\policies\system]主键,将键名 disableregistrytools 的…

Java基本语法(12)--分支结构if-else

基本格式结构 if (条件语句){条件语句为true时&#xff0c;进入执行的语句&#xff1b; }else{条件语句为false时&#xff0c;执行的语句&#xff1b; }if (条件语句1){条件语句1为true时&#xff0c;进入执行的语句&#xff1b; }else if(条件语句2){条件语句1为false&#x…

服务器硬盘 主板,服务器主板和普通主板有什么区别?

什么是工控服务器?首先我们来看专业上服务器是怎样定义的&#xff1a;工控服务器是一种高性能计算机&#xff0c;作为网络的节点&#xff0c;存储、处理网络上80%的数据、信息&#xff0c;因此也被称为网络的灵魂。也可以这样讲&#xff0c;工控服务器是指一个管理资源并为用户…