ad
主页 > 中国人寿 >

karl urban:springboot 官方例子中文翻译--调用RESTful Web Service开发

2019-07-28 08:57 来源:一统保险网 对此文章感兴趣的有:
ad
"\u003Cdiv\u003E\u003Cp\u003E\u003Cstrong\u003E大家好,我利用业余时间,翻译了Spring官网的例子,方便中文不好的同学,将陆续发到头条上,欢迎大家关注,也可以上我个人BLOG:itmanclub.com,上面有已经翻译过的。\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002Fc3c80aa2e08b4287886afc92a4569872\" img_width=\"908\" img_height=\"614\" alt=\"springboot 官方例子中文翻译--调用RESTful Web Service开发\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cstrong\u003E官方例子是最适合入门的,因为讲得很细,很有条理性,而且是最初出处,可以再加工转到其它地方\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E本例讲调用RESTful Web Service开发,这是最基本的例子:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E程序结构\u003C\u002Fp\u003E\u003Cpre\u003E└── src\u003Cbr\u003E └── main\u003Cbr\u003E └── java\u003Cbr\u003E └── hello\u003Cbr\u003Epom.xml\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003Epom.xml文件\u003C\u002Fp\u003E\u003Cpre\u003E<?xml version=\"1.0\" encoding=\"UTF-8\"?>\u003Cbr\u003E<project xmlns=\"http:\u002F\u002Fmaven.apache.org\u002FPOM\u002F4.0.0\" xmlns:xsi=\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\u003Cbr\u003E xsi:schemaLocation=\"http:\u002F\u002Fmaven.apache.org\u002FPOM\u002F4.0.0 https:\u002F\u002Fmaven.apache.org\u002Fxsd\u002Fmaven-4.0.0.xsd\">\u003Cbr\u003E <modelVersion>4.0.0<\u002FmodelVersion>\u003Cbr\u003E <groupId>org.springframework<\u002FgroupId>\u003Cbr\u003E <artifactId>gs-consuming-rest<\u002FartifactId>\u003Cbr\u003E <version>0.1.0<\u002Fversion>\u003Cbr\u003E <parent>\u003Cbr\u003E <groupId>org.springframework.boot<\u002FgroupId>\u003Cbr\u003E <artifactId>spring-boot-starter-parent<\u002FartifactId>\u003Cbr\u003E <version>2.1.4.RELEASE<\u002Fversion>\u003Cbr\u003E <\u002Fparent>\u003Cbr\u003E <properties>\u003Cbr\u003E <java.version>1.8<\u002Fjava.version>\u003Cbr\u003E <\u002Fproperties>\u003Cbr\u003E <dependencies>\u003Cbr\u003E <dependency>\u003Cbr\u003E <groupId>org.springframework.boot<\u002FgroupId>\u003Cbr\u003E <artifactId>spring-boot-starter<\u002FartifactId>\u003Cbr\u003E <\u002Fdependency>\u003Cbr\u003E <dependency>\u003Cbr\u003E <groupId>org.springframework<\u002FgroupId>\u003Cbr\u003E <artifactId>spring-web<\u002FartifactId>\u003Cbr\u003E <\u002Fdependency>\u003Cbr\u003E <dependency>\u003Cbr\u003E <groupId>com.fasterxml.jackson.core<\u002FgroupId>\u003Cbr\u003E <artifactId>jackson-databind<\u002FartifactId>\u003Cbr\u003E <\u002Fdependency>\u003Cbr\u003E <\u002Fdependencies>\u003Cbr\u003E <build>\u003Cbr\u003E <plugins>\u003Cbr\u003E <plugin>\u003Cbr\u003E <groupId>org.springframework.boot<\u002FgroupId>\u003Cbr\u003E <artifactId>spring-boot-maven-plugin<\u002FartifactId>\u003Cbr\u003E <\u002Fplugin>\u003Cbr\u003E <\u002Fplugins>\u003Cbr\u003E <\u002Fbuild>\u003Cbr\u003E<\u002Fproject>\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003ESpring Boot将会你做如下的事:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E将 classpath 里面所有用到的jar包构建成一个可执行的 JAR 文件,方便执行和传输你的服务\u003C\u002Fli\u003E\u003Cli\u003E搜索public static void main()方法并且将它当作可执行类\u003C\u002Fli\u003E\u003Cli\u003E根据springboot版本,去查找相应的依赖类版本,当然你可以定义其它版本。\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E获取一个REST资源\u003C\u002Fp\u003E\u003Cp\u003E完成项目设置后,您可以创建一个使用RESTful服务的简单应用程序。\u003C\u002Fp\u003E\u003Cp\u003Ehttps:\u002F\u002Fgturnquist-quoters.cfapps.io\u002Fapi\u002Frandom\u003C\u002Fp\u003E\u003Cp\u003E是一个RESTful服务。它随机获取关于SpringBoot的称赞名言,并将其作为JSON文档返回。\u003C\u002Fp\u003E\u003Cp\u003E如果您通过Web浏览器或curl请求该URL,您将收到一个类似以下内容的JSON文档:\u003C\u002Fp\u003E\u003Cpre\u003E{\"type\":\"success\",\"value\":{\"id\":7,\"quote\":\"The real benefit of Boot, however, is that it's just Spring. That means any direction the code takes, regardless of complexity, I know it's a safe bet.\"}}\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E使用RESTWeb服务的一个更有用的方法是通过编程。为了帮助您完成这项任务,Spring提供了一个称为 RestTemplate的方便模板类。\u003C\u002Fp\u003E\u003Cp\u003E首先,创建一个包含所需数据的域类:\u003C\u002Fp\u003E\u003Cpre\u003Esrc\u002Fmain\u002Fjava\u002Fhello\u002FQuote.java\u003Cbr\u003Epackage hello;\u003Cbr\u003Eimport com.fasterxml.jackson.annotation.JsonIgnoreProperties;\u003Cbr\u003E@JsonIgnoreProperties(ignoreUnknown = true)\u003Cbr\u003Epublic class Quote {\u003Cbr\u003E private String type;\u003Cbr\u003E private Value value;\u003Cbr\u003E public Quote() {\u003Cbr\u003E }\u003Cbr\u003E public String getType() {\u003Cbr\u003E return type;\u003Cbr\u003E }\u003Cbr\u003E public void setType(String type) {\u003Cbr\u003E this.type = type;\u003Cbr\u003E }\u003Cbr\u003E public Value getValue() {\u003Cbr\u003E return value;\u003Cbr\u003E }\u003Cbr\u003E public void setValue(Value value) {\u003Cbr\u003E this.value = value;\u003Cbr\u003E }\u003Cbr\u003E @Override\u003Cbr\u003E public String toString() {\u003Cbr\u003E return \"Quote{\" +\u003Cbr\u003E \"type='\" + type + '\\'' +\u003Cbr\u003E \", value=\" + value +\u003Cbr\u003E '}';\u003Cbr\u003E }\u003Cbr\u003E}\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E上面使用Jackson JSON处理库中的@JsonIgnoreProperties进行了注解,以表明任何未绑定在此类型中的属性都应被忽略。\u003C\u002Fp\u003E\u003Cp\u003E为了直接将数据绑定到自定义类型,需要指定与从API返回的JSON文档中的键完全相同的变量名。如果JSON文档中的变量名和键不匹配,则需要使用@JsonIgnoreProperties 注解来指定JSON文档的确切键。\u003C\u002Fp\u003E\u003Cp\u003E需要一个额外的类来嵌入内部引用本身:\u003C\u002Fp\u003E\u003Cp\u003Esrc\u002Fmain\u002Fjava\u002Fhello\u002FValue.java\u003C\u002Fp\u003E\u003Cpre\u003Epackage hello;\u003Cbr\u003Eimport com.fasterxml.jackson.annotation.JsonIgnoreProperties;\u003Cbr\u003E@JsonIgnoreProperties(ignoreUnknown = true)\u003Cbr\u003Epublic class Value {\u003Cbr\u003E private Long id;\u003Cbr\u003E private String quote;\u003Cbr\u003E public Value() {\u003Cbr\u003E }\u003Cbr\u003E public Long getId() {\u003Cbr\u003E return this.id;\u003Cbr\u003E }\u003Cbr\u003E public String getQuote() {\u003Cbr\u003E return this.quote;\u003Cbr\u003E }\u003Cbr\u003E public void setId(Long id) {\u003Cbr\u003E this.id = id;\u003Cbr\u003E }\u003Cbr\u003E public void setQuote(String quote) {\u003Cbr\u003E this.quote = quote;\u003Cbr\u003E }\u003Cbr\u003E @Override\u003Cbr\u003E public String toString() {\u003Cbr\u003E return \"Value{\" +\u003Cbr\u003E \"id=\" + id +\u003Cbr\u003E \", quote='\" + quote + '\\'' +\u003Cbr\u003E '}';\u003Cbr\u003E }\u003Cbr\u003E}\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E他使用相同的注释,但只是简单的映射到其他字段。\u003C\u002Fp\u003E\u003Cp\u003E让程序运行方法\u003C\u002Fp\u003E\u003Cp\u003E让程序运行的方法有两种,一种是生成传统的war文件,放到外部的WEB容器中;另一种是生成可执行jar文件,这需要有一个类中有main()方法:\u003C\u002Fp\u003E\u003Cp\u003E写一个使用RestTemplate的Application类,并从这个类运行程序:\u003C\u002Fp\u003E\u003Cp\u003Esrc\u002Fmain\u002Fjava\u002Fhello\u002FApplication.java\u003C\u002Fp\u003E\u003Cpre\u003Epackage hello;\u003Cbr\u003Eimport org.slf4j.Logger;\u003Cbr\u003Eimport org.slf4j.LoggerFactory;\u003Cbr\u003Eimport org.springframework.boot.SpringApplication;\u003Cbr\u003Eimport org.springframework.boot.autoconfigure.SpringBootApplication;\u003Cbr\u003Eimport org.springframework.web.client.RestTemplate;\u003Cbr\u003Epublic class Application {\u003Cbr\u003E private static final Logger log = LoggerFactory.getLogger(Application.class);\u003Cbr\u003E public static void main(String args[]) {\u003Cbr\u003E RestTemplate restTemplate = new RestTemplate();\u003Cbr\u003E Quote quote = restTemplate.getForObject(\"https:\u002F\u002Fgturnquist-quoters.cfapps.io\u002Fapi\u002Frandom\", Quote.class);\u003Cbr\u003E log.info(quote.toString());\u003Cbr\u003E }\u003Cbr\u003E}\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E因为Jackson JSON 类库在类路径上,RestTemplate就使用它来把JSON数据转换Quote对像,从那里,Quote对象的内容将被记录到控制台。\u003C\u002Fp\u003E\u003Cp\u003E这里,您只使用RestTemplate来发出HTTP GET请求。但是RestTemplate还支持其他HTTP动作,如 POST, PUT和DELETE。\u003C\u002Fp\u003E\u003Cp\u003E管理应用程序生命周期\u003C\u002Fp\u003E\u003Cp\u003E到目前为止,我们的应用程序中还没有使用Springboot。使用Springboot的一个优点是,让Springboot管理RestTemplate中的消息转换,我们可以在主类上使用@SpringBootApplication,并在转换主方法来启动它,\u003C\u002Fp\u003E\u003Cp\u003E就像在任何SpringBoot应用程序中一样。最后,我们将RestTemplate移动到CommandLineRunner回调,以便在启动时由Springboot执行:\u003C\u002Fp\u003E\u003Cp\u003Esrc\u002Fmain\u002Fjava\u002Fhello\u002FApplication.java\u003C\u002Fp\u003E\u003Cpre\u003Epackage hello;\u003Cbr\u003Eimport org.slf4j.Logger;\u003Cbr\u003Eimport org.slf4j.LoggerFactory;\u003Cbr\u003Eimport org.springframework.boot.CommandLineRunner;\u003Cbr\u003Eimport org.springframework.boot.SpringApplication;\u003Cbr\u003Eimport org.springframework.boot.autoconfigure.SpringBootApplication;\u003Cbr\u003Eimport org.springframework.boot.web.client.RestTemplateBuilder;\u003Cbr\u003Eimport org.springframework.context.annotation.Bean;\u003Cbr\u003Eimport org.springframework.web.client.RestTemplate;\u003Cbr\u003E@SpringBootApplication\u003Cbr\u003Epublic class Application {\u003Cbr\u003E private static final Logger log = LoggerFactory.getLogger(Application.class);\u003Cbr\u003E public static void main(String args[]) {\u003Cbr\u003E SpringApplication.run(Application.class);\u003Cbr\u003E }\u003Cbr\u003E @Bean\u003Cbr\u003E public RestTemplate restTemplate(RestTemplateBuilder builder) {\u003Cbr\u003E return builder.build();\u003Cbr\u003E }\u003Cbr\u003E @Bean\u003Cbr\u003E public CommandLineRunner run(RestTemplate restTemplate) throws Exception {\u003Cbr\u003E return args -> {\u003Cbr\u003E Quote quote = restTemplate.getForObject(\u003Cbr\u003E \"https:\u002F\u002Fgturnquist-quoters.cfapps.io\u002Fapi\u002Frandom\", Quote.class);\u003Cbr\u003E log.info(quote.toString());\u003Cbr\u003E };\u003Cbr\u003E }\u003Cbr\u003E}\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E上述RestTemplateBuilder是由Spring自动注入的,如果您使用它来创建RestTemplate,那么您将受益于Springboot中自动配置的消息转换器和请求工厂。我们还将RestTemplate提取到@Bean中,以便于测试(这样更容易模拟)。\u003C\u002Fp\u003E\u003Cp\u003E运行你的程序(STS下,Maven可参考前面文章):右键-选择Run as-Spring Boot App ,输出如下:\u003C\u002Fp\u003E\u003Cpre\u003E2019-06-26 23:03:23.241 INFO 10288 --- [ main] c.example.demo.RestTemplateApplication : Quote{type='success', value=Value{id=2, quote='With Boot you deploy everywhere you can find a JVM basically.'}}\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E如果你看到如下的错:\u003C\u002Fp\u003E\u003Cpre\u003E no suitable HttpMessageConverter found for response type [class hello.Quote]\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E有可能您所处的环境无法连接到后端服务(如果可以连接到该服务,则发送JSON)。也许你的公司是在代理服务器后,请尝试设置正确http.proxyhost和http.proxyport系统属性。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002Fd2b4acdda22949aea2f6bec47d2fb050\" img_width=\"214\" img_height=\"113\" alt=\"springboot 官方例子中文翻译--调用RESTful Web Service开发\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F3d599aa0d22c4a2a90e01d000b645ec5\" img_width=\"843\" img_height=\"396\" alt=\"springboot 官方例子中文翻译--调用RESTful Web Service开发\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003C\u002Fdiv\u003E"'.slice(6, -6),
ad

 

(责任编辑:中国人寿

相关报道


网站介绍

    一统保险网-中国太平,中国人寿,中国平安,中国太平洋保险,新华保险直通车,中国阳光保险,富德生命人寿,信诚人寿保险

ad

热门阅读

ad

随机阅读