Java Annotation例子

https://www.baeldung.com/java-custom-annotation

阅读了baeldung里的例子,把code抽取出来,作为参考

package anno;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface Init {

}

package anno;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.FIELD)

public @interface JsonElement {

public String key() default "";

}

package anno;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.TYPE)

public @interface JsonSerializable {

}

package anno;

@JsonSerializable

public class Person {

@JsonElement

private String firstName;

@JsonElement

private String lastName;

@JsonElement(key = "personAge")

private String age;

private String address;

public Person(String firstName, String lastName, String age) {

this.firstName = firstName;

this.lastName=lastName;

this.age=age;

}

@Init

private void initNames() {

this.firstName = this.firstName.substring(0, 1).toUpperCase()

+ this.firstName.substring(1);

this.lastName = this.lastName.substring(0, 1).toUpperCase()

+ this.lastName.substring(1);

}

// Standard getters and setters

}

package anno;

public class JsonSerializationException extends Exception {

public JsonSerializationException(String message) {

super(message);

}

}

package anno;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.Map;

import java.util.Objects;

import java.util.stream.Collectors;

public class ObjectToJsonConverter {

public String convertToJson(Object object) throws JsonSerializationException {

try {

checkIfSerializable(object);

initializeObject(object);

return getJsonString(object);

} catch (Exception e) {

throw new JsonSerializationException(e.getMessage());

}

}

private void checkIfSerializable(Object object) throws JsonSerializationException {

if (Objects.isNull(object)) {

throw new JsonSerializationException("The object to serialize is null");

}

Class<?> clazz = object.getClass();

if (!clazz.isAnnotationPresent(JsonSerializable.class)) {

throw new JsonSerializationException("The class "

+ clazz.getSimpleName()

+ " is not annotated with JsonSerializable");

}

}

private void initializeObject(Object object) throws Exception {

Class<?> clazz = object.getClass();

for (Method method : clazz.getDeclaredMethods()) {

if (method.isAnnotationPresent(Init.class)) {

method.setAccessible(true);

method.invoke(object);

}

}

}

private String getJsonString(Object object) throws Exception {

Class<?> clazz = object.getClass();

Map<String, String> jsonElementsMap = new HashMap<>();

for (Field field : clazz.getDeclaredFields()) {

field.setAccessible(true);

if (field.isAnnotationPresent(JsonElement.class)) {

jsonElementsMap.put(getKey(field), (String) field.get(object));

}

}

String jsonString = jsonElementsMap.entrySet()

.stream()

.map(entry -> "\"" + entry.getKey() + "\":\""

+ entry.getValue() + "\"")

.collect(Collectors.joining(","));

return "{" + jsonString + "}";

}

private String getKey(Field field) {

JsonElement je= field.getAnnotation(JsonElement.class);

if(je.key()!=null && je.key().length()>0) {

return je.key();

}else {

return field.getName();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值