前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Annotation

Spring Annotation

原创
作者头像
HLee
修改2021-09-14 17:27:51
7810
修改2021-09-14 17:27:51
举报
文章被收录于专栏:房东的猫房东的猫

基础注解

代码语言:javascript
复制
@RestController
描述:等同于@Controller + @ResponseBody

@RequestBody
描述:用来接收前端传递给后端的json字符串中的数据(请求体中的数据的)

@ResponseBody
描述:将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据

@RequestMapping
描述:注解来将请求URL映射到整个类上,或某个特定的方法上

@Component
描述:把对象加载到Spring容器中,最基础的存在,很多的注解都是继承它的,只有一个属性值,默认值是“”。

@Service
描述:一般用于Service层的注解,继承了Component组件,本质上一样,方便做业务范围区分而已。

@Repository
描述:作用于Dao层的注解,很多经常用JPA的同学都清楚这个东西,与Service本质上一样,业务领域上区别而已。

@Controller
描述:作用在控制器上的注解,与Service一样,业务领域区分。

@RequestParam&@PathVariable

描述:@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @PathVariable 是从一个URI模板里面来填充

代码语言:javascript
复制
URL:http://localhost:8080/springmvc/hello/101?param1=10&param2=20

@RequestMapping("/hello/{id}")
public String getDetails(@PathVariable(value="id") String id,
                         @RequestParam(value="param1", required=true) String param1,
                         @RequestParam(value="param2", required=false) String param2){
         .......
}

URL:http:localhost:9405/client/add/account/123456

@PostMapping(value = "/client/add/{entity}/{entityId}")
public String add(@PathVariable("entity") String entity,
                  @PathVariable("entityId") String entityId);


@RequestParam 支持下面四种参数

defaultValue 如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值
name 绑定本次参数的名称,要跟URL上面的一样
required 这个参数是不是必须的
value 跟name一样的作用,是name属性的一个别名

lombok

描述:lombok提供了很多注解,在编译时候生成java代码,代替了手工编写一些简单的代码,使程序员可以关注更重要的实现。

代码语言:javascript
复制
@Getter / @Setter

@ToString
例如:@ToString(exclude = {"id"}, includeFieldNames = false)

@Data
例如:@Data 注解相当于 Getter + Setter + ToString + @RequiredArgsConstrutor

@Builder
描述:用于快速构建对象

@AllArgsConstructor:全部参数构造函数

@NoArgsConstructor:无参数构造函数

@RequiredArgsConstructor:NoNull参数和常量构造函数

@JsonIgnore

描述:注解用来忽略某些字段,这个注解一般用在我们要忽略的字段上。

代码语言:javascript
复制
@JsonIgnore//默认是true,与@JsonIgnore(true)同义,序列化时忽略该属性
private Integer id;
 
@JsonIgnore(value = false)//序列化时不忽略该属性
private String name;

@JsonIgnoreProperties

描述:将这个注解写在类上之后,就会忽略类中不存在的字段。

代码语言:javascript
复制
@JsonIgnoreProperties(ignoreUnknown = true)
代码语言:javascript
复制
@JsonIgnoreProperties({"address", "sex"})
@Getter
@Setter
public class User {

    private Long id;
    private String name;
    private String address;
    private String sex;
}

@Test
public void JsonIgnoreTest() throws Exception{

   User user = new User();
   user.setId(1L);
   user.setName("Tom");
   user.setAddress("北京市 朝阳区");
   user.setSex("man");

   ObjectMapper mapper = new ObjectMapper();

   System.out.println(mapper.writeValueAsString(user));
}

@DateTimeFormat

描述:

代码语言:javascript
复制
<!-- joda-time -->
<dependency>
     <groupId>joda-time</groupId>
     <artifactId>joda-time</artifactId>
     <version>2.3</version>
</dependency>
代码语言:javascript
复制
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;

@JsonFormat

描述:@JsonFormat注解是一个时间格式化注解,比如我们存储在mysql中的数据是date类型的,当我们读取出来封装在实体类中的时候,就会变成英文时间格式,而不是yyyy-MM-dd HH:mm:ss这样的中文时间,因此我们需要用到JsonFormat注解来格式化我们的时间。

代码语言:javascript
复制
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.2</version>
</dependency>
代码语言:javascript
复制
/**
 * 生日
 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date birthday;

pattern:日期格式;timezone:时区

@PreDestroy

描述:

代码语言:javascript
复制

@PostConstruct

描述:@PostConstruct注解好多人以为是Spring提供的,其实是Java自己的注解。@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。

代码语言:javascript
复制
通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)

@PostConstruct
public void someMethod(){}

或者

public @PostConstruct void someMethod(){}

@Deprecated

表示此方法已废弃、暂时可用,但以后此类或方法都不会再更新、后期可能会删除,建议后来人不要调用此方法。

此注解可用于类上、方法上、属性上。通常在给定此注解后,应该在方法注释中同样说明:废弃此方法后的代替方法是哪个、处理原逻辑代替方案是什么 、本身不打算代替,而是直接清除的,则最好给出会清除此方法的具体代码版本号 。

代码语言:javascript
复制
@Deprecated(since = "1.2", forRemoval = true)

since: 指定已注解的API元素已被弃用的版本
forRemoval: 表示在将来的既定版本中会被删除,应该迁移 API

@SerializedName

SerializedName的主要作用:属性重命名,可以将json中的属性名转为我们自己自定义的属性名其次@SerializedName注解提供了两个属性,上面用到了其中一个value,别外还有一个属性alternate:接收一个String数组alternate数组中出现任意一个属性名都可以转换为自定义的属性,如果出现多个则以最后一个为准。

代码语言:javascript
复制
@Getter
@Setter
@ToString
public class User {

    @SerializedName(value = "uname", alternate = {"newName", "name"})
    private String userName;
}
代码语言:javascript
复制
public class SerializedName {

    public static void main(String[] args) {

        Gson gson = new Gson();

        String str = "{\n" + "\"uname\":\"lihuan\"\n" + "}";

        User user = gson.fromJson(str, User.class);
        System.out.println(user.getUserName());
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础注解
  • @RequestParam&@PathVariable
  • lombok
  • @JsonIgnore
  • @JsonIgnoreProperties
  • @DateTimeFormat
  • @JsonFormat
  • @PreDestroy
  • @PostConstruct
  • @Deprecated
  • @SerializedName
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档