为了账号安全,请及时绑定邮箱和手机立即绑定

Java Web基础入门,Springboot入门(3)

标签:
Java

前言

语言都是相通的,只要搞清楚概念后就可以编写代码了。而概念是需要学习成本的。

本文首发于博客园-Ryan Miao. 由于限制2000字,只能分多篇。

编写第一个API

虽然服务端配置好了,但并没有API. 新建com.test.demo.controller.HelloController.java

package com.test.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Created by Ryan on 2017/11/14/0014.
 */
@Controller
public class HelloController {

    @ResponseBody
    @GetMapping("/hello")
    public String hello(){
        return "{\"hello\":\"world\"}";
    }
}

然后,再次运行main方法,启动完毕后,访问 http://localhost:8080/hello, 第一个API开发完毕。

  • @Controller这个注解标注这个类是一个controller,用来接收请求和响应response
  • @GetMapping("/hello")标注这个方法是一个路由请求实现,括号里就是我们的路由
  • @ResponseBody这个注解标注这个API的返回值是json,其实就是再response的header里塞入了contentType, 当然,在这里还涉及到class转json的问题。那么,回到开始的问题,json是什么东西?

JSON在Java里没有这个数据结构,其实就是一个String,遵从JSON规则的String,我们的方法在返回这段String的时候,加上header里的contentType,浏览器就会当做JSON读取。在Javascript去读Ajax的结果就变成了一个JSON对象了。其他的,比如Android,读取出来的还是一个字符串,需要手动反序列化成我们想要的类。

说到序列化,我们不可能每个返回结构都这样拼接字符串吧。所以,ResponseBody标注的请求还会使用一个jackson的适配器,这些都是springboot内置的。暂时也不需要研究实现原理。jackson是什么鬼?

jackson是Java中使用最广泛的一个json解析lib,他可以将一个Java 类转变成一个json字符串,也同样可以把一个json字符串反序列化成一个java对象。Springboot是如何做到的?这就需要去研究源码了。

启动和调试

最简单的是启动就是运行main方法,还可以命令行启动

gradlew bootRun

debug,最简单的就是以debug启动main方法。当然也可以远程。

gradlew bootRun --debug-jvm

然后,在IDEA中,点击Edit configurations

选择remote

然后,点击debug

如果想支持热加载,则需要添加

compile("org.springframework.boot:spring-boot-devtools")

在IDEA里修改Java class后需要,重新build当前class才能生效。快捷键 ctrl+shif+F9

配置文件

spring boot默认配置了很多东西,但有时候我们想要修改默认值,比如不想用8080作为端口,因为端口被占用了。

resources下,新建application.properties, 然后在里面输入

server.port=8081

然后,重启项目,发现端口已经生效。

再配置一些common的自定义,比如日志。项目肯定要记录日志的,System.out.println远远达不到日志的要求。springboot默认采用Logback作为日志处理工具。

spring.output.ansi.enabled=ALWAYS
logging.file=logs/demo.log
logging.level.root=INFO

接着,开发和生产环境的配置必然不同的,比如数据库的地址不同,那么可以分配置文件来区分环境。

在resources下新建application-dev.properties, application-prod.properties. spring默认通过后缀不同来识别不同的环境,不加后缀的是base配置。那么如何生效呢?

只要在base的配置文件中

spring.profiles.active=dev

比如,我们在dev环境中设置loglevel为debug

logging.level.root=debug

这样,springboot会优先读取base文件,然后读取dev,当dev有相同的配置项时,dev会覆盖base。

这样,本地开发和生产环境隔离,部署也方便。事实上,springboot接收参数的优先级为resources下的配置文件<命令行参数. 通常,我们部署项目的脚本会使用命令行参数来覆盖配置文件,这样就可以动态指定配置文件了。

下一篇,接收JSON参数,响应JSON。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
56
获赞与收藏
133

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消