SpringBoot开发常用技术整合(二)

一、基本目录结构

基本目录

二、SpringBoot响应客户端

1、controller

在controller目录下创建一个controller:
单机new ->java class,命名为XxxController,例如:


controller

编写内容:



运行结果:

三、SpringBoot响应客户端数据渲染json

在pojo里创建一个user类,在此之前我先引入一个简化实体类的maven依赖Lombok,在pom文件添加如下依赖即可:


   org.projectlombok
   lombok
   1.18.6
   provided

学习更多关于Lombok访问GitHub官方:https://github.com/mplushnikov/lombok-intellij-plugin

user类:

package com.example.pojo;

import lombok.*;
@Data  //创建所有get set 等别的方法
@AllArgsConstructor  //创建所有有参构造方法
@NoArgsConstructor  //创建无参构造方法
@Builder  //创建对象,类似于new
public class User {
   private Integer age;
   private String name;
   private String sex;
   private Date birthday;
}

测试controller:

package com.example.controller;

import com.example.pojo.User;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

/**
 * @description: 测试控制器
 * @author: LiChen
 * @create: 2019-04-19 16:25
 */
@RestController        //spring boot注解 @RestController = @Controller + @ResponseBody
@RequestMapping("/test")    //controller请求路径
public class TestController {

    @RequestMapping(value = "/test",method = RequestMethod.GET) //test方法请求路径和请求方式
    public Integer test(){
        Integer str = 3;
        return str;
    }

    @RequestMapping(value = "get_user",method = RequestMethod.GET)
    public User getUser(){
       User user = User.builder()
               .age(16)
               .name("张三")
               .sex("男")
               .birthday(new Date())
               .build();
       return user;
    }

}

启动服务访问你的地址,运行结果:


image.png

光是这样返回肯定是不行的,所以要对返回结果进行封装,以下是我封装的两个类:SR.java和SRCode.java

package com.example.common;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;


/**
 * @Title: RS.java
 * @Package: com.xxx.common
 * @author: LiChen
 * @create: 2019-04-19 13:27
 */

//保证序列化json的时候,如果是null的对象,key也会消失
//@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) 过期不推荐使用
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SR implements Serializable {
    //响应状态码
    private Integer status;
    //响应消息
    private String msg;
    //响应数据
    private T data;

    private SR(Integer status){
        this.status = status;
    }

    private SR(Integer status,String msg){
        this.status = status;
        this.msg = msg;
    }

    private SR(Integer status,T data){
        this.data = data;
        this.status = status;
    }

    private SR(Integer status,String msg,T data){
        this.status = status;
        this.data = data;
        this.msg = msg;
    }

    //使之不再json序列化中
    @JsonIgnore
    private boolean success(){
        return this.status == SRCode.SUCCESS.getCode();
    }

    public Integer getStatus(){
        return status;
    }

    public T getData(){
        return data;
    }

    public String getMsg(){
        return msg;
    }

    public static  SR ok(){
        return new SR(SRCode.SUCCESS.getCode());
    }

    public static  SR ok(T data){
        return new SR(SRCode.SUCCESS.getCode(),SRCode.SUCCESS.getDesc(),data);
    }

    public static  SR ok(String msg){
        return new SR(SRCode.SUCCESS.getCode(),msg);
    }

    public static  SR ok(String msg ,T data){
        return new SR(SRCode.SUCCESS.getCode(),msg,data);
    }

    public static  SR error(){
        return new SR(SRCode.ERROR.getCode(),SRCode.ERROR.getDesc());
    }

    public static  SR error(String msg){
        return new SR(SRCode.ERROR.getCode(),msg);
    }

    public static  SR error(Integer code,String msg){
        return new SR(code,msg);
    }

}

上述用了json序列化工具:pom依赖


  com.fasterxml.jackson.core
  jackson-databind
  2.6.2

package com.example.common;

/**
 * @Tile: SRCode
 * @author: LiChen
 * @create: 2019-04-19 13:44
 * @description: 自定义响应数据结构:
 *                               200:表示成功
 *                               500:表示错误,错误信息存在msg字段中
 *                               501:bean验证错误,不管有多少个错误都已map形式返回
 *                               502:拦截器拦截到用户token错误
 *                               555:异常抛出信息
 *                               10:用户未登陆
 *                               2:不是管理员权限
 */
public enum SRCode {

    SUCCESS(200,"SUCCESS"),
    ERROR(500,"ERROR"),
    BEAN_ERROR(501,"BEAN_ERROR"),
    TOKEN_ERROR(502,"TOKEN_ERROR"),
    EXCEPTION_INFO(555,"EXCEPTION_INFO"),
    NEED_LOGIN(10, "NEED_LOGIN"),
    ILLEGAL_ARGUMENT(2, "ILLEGAL_ARGUMENT");

    private final Integer code;
    private final String desc;

    SRCode(Integer code,String desc){
        this.code = code;
        this.desc = desc;
    }

    public int getCode(){
        return code;
    }

    public String getDesc(){
        return desc;
    }

}

修改controller:

 @RequestMapping(value = "get_user",method = RequestMethod.GET)
    public SR getUser(){
       User user = User.builder()
               .age(16)
               .name("张三")
               .sex("男")
               .birthday(new Date())
               .build();
       return SR.ok(user);
    }

运行结果:


image.png

你可能感兴趣的:(SpringBoot开发常用技术整合(二))