Java后台框架篇--Spring之WebService入门
来源:互联网 发布:人工智能与伦理道德 编辑:程序博客网 时间:2024/06/16 20:04
前置技能
① 使用maven来管理java项目
这个技能必须点一级,以便快速配置项目。
本文实际上是我学习Spring的过程中搬的官网上的demo,使用maven配置项目。
② jdk 1.8+ 该服务demo需要在jdk1.8+的环境下运行
新建项目,配置依赖文件
① 安装好eclipse的maven插件后,使用file——new——other——maven——maven project 新建一个空的maven项目。
② 访问Spring官网demo http://spring.io/guides/gs/rest-service/
将Build With Maven 模块中提供的pom内容复制到我们自己的pom文件中,注意将项目坐标替换成上图中的配置。
最终得到pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sogou.testspring</groupId> <artifactId>testspring-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestone</id> <url>https://repo.spring.io/libs-release</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestone</id> <url>https://repo.spring.io/libs-release</url> </pluginRepository> </pluginRepositories></project>
编写Model和Controller
在source目录 src/main/java下新建hello包,在hello包下新建
① Greeting.java
package hello;public class Greeting { private final long id; private final String content; public Greeting(long id, String content) { this.id = id; this.content = content; } public long getId() { return id; } public String getContent() { return content; }}
② GreetingController.java
package hello;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicLong;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class GreetingController { private static final String template = "Hello, %s!"; private final AtomicLong counter = new AtomicLong(); @RequestMapping("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } @RequestMapping(value="/greeting2") public String Greeting2(@RequestParam(value="name",defaultValue="meiyou") String name){ return name; } @RequestMapping("/greeting3") public List<Greeting> greeting3(@RequestParam(value="name", defaultValue="World") String name) { List<Greeting> list=new ArrayList<Greeting>(); list.add(new Greeting(counter.incrementAndGet(), String.format(template, name))); list.add(new Greeting(counter.incrementAndGet(), String.format(template, name))); return list; }}
③ 启动服务 Application.java
package hello;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
官网的demo至此为止,可以发现这个demo并不需要配置web.xml或者spring dispatherServlet的xml文件,也需要依赖web容器就可以运行。 看起来这更像是一个普通的Java应用程序。
启动服务&访问
① 因为在pom中配置了插件
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
所以我们可以直接 runAs——maven build,target输入 spring-boot:run 来启动服务
② 通过maven package打包项目,生成jar包,然后在target目录下 java -jar jar包名称,即可启动项目
但是
原搬原官网的demo,启动的时候会报错,顺着报错信息找下去,发现
spring-boot-autoconfigure-1.2.5.RELEASE.jar包下
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties 类中
有这么一段代码
public static final String DEFAULT_PREFIX = "classpath:/templates/";public static final String DEFAULT_SUFFIX = ".html";
看样子需要一个templates的目录,于是在resources目录下新建一个templates目录,再次启动成功。
在浏览器中访问:
http://localhost:8080/greeting
{"id":2,"content":"Hello, World!"}
http://localhost:8080/greeting2
meiyou
http://localhost:8080/greeting3
[{"id":3,"content":"Hello, World!"},{"id":4,"content":"Hello, World!"}]
其他
注意到demo的控制器中使用了一个注解 @RestController ,这个在spring3.x里边是没有的。
/* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.springframework.web.bind.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import org.springframework.stereotype.Controller;/** * A convenience annotation that is itself annotated with {@link Controller @Controller} * and {@link ResponseBody @ResponseBody}. * <p> * Types that carry this annotation are treated as controllers where * {@link RequestMapping @RequestMapping} methods assume * {@link ResponseBody @ResponseBody} semantics by default. * * @author Rossen Stoyanchev * @author Sam Brannen * @since 4.0 */@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Controller@ResponseBodypublic @interface RestController { /** * The value may indicate a suggestion for a logical component name, * to be turned into a Spring bean in case of an autodetected component. * @return the suggested component name, if any * @since 4.0.1 */ String value() default "";}
可以看到该注解是一个类注解,其功能相当于同时应用了 @Controller 和 @ResponseBody
如果您觉得这篇文章对您有帮助,欢迎点击右下角【推荐】支持一下我,谢谢!
这篇文章为原创文章,转载请注明出处!
- Java后台框架篇--Spring之WebService入门
- Java后台框架篇--Spring之WebFlow
- Java后台框架篇--Spring之AOP
- Java后台框架篇--Spring之缓存
- Java后台框架篇--Spring之AspectJ AOP
- Java后台框架篇--Spring高级装配
- Java后台框架篇--spring+websocket整合
- Java之Spring框架入门示例!
- WebService CXF学习(入门篇4):整合Spring框架
- WebService CXF学习(入门篇4):整合Spring框架
- Java后台框架篇--Spring框架中模块组成
- Java后台框架篇--Spring之Bean的五个作用域
- java框架--Spring入门
- Java后台框架篇--Struts之简介
- Java后台框架篇--Spring依赖注入和控制反转
- Java后台框架篇--Spring的AOP实现原理
- Java后台框架篇--Spring应用上下文配置:Xml方式
- Java后台框架篇--Spring中Bean的生命周期
- Java基础知识总结(转载)
- python概要
- plsql乱码解决
- [LeetCode]7. Reverse Integer
- Android TextView省略号代替多出数据
- Java后台框架篇--Spring之WebService入门
- 【yoyo】Servlet开发步骤
- nyoj 860又见01背包(01背包)
- LeetCode--Container With Most Water
- ros操作系统的介绍
- solr中同义词配置 (Synonyms)
- Xpath+第一节
- Reids框架NO_SQL非关系数据库的一些简单应用
- 字符串 数组 元组 字典