通过ts的反射reflect-metadata和修饰器实现nest的@Controller和@Get功能

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,自定义注解是一种元数据可以用于给代码添加额外的信息。实现类似于@JsonProperty的功能,你可以通过自定义注解来指定属性在序列化和反序列化过程中的名称。 下面是一个简单的示例,展示如何使用自定义注解实现类似于@JsonProperty的功能: 首先,定义一个自定义注解@JsonField: ```java 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 JsonField { String value() default ""; } ``` 然后,在需要使用该注解的类中,使用@JsonField注解标记需要序列化和反序列化的属性: ```java public class MyClass { @JsonField("name") private String myName; @JsonField("age") private int myAge; // 省略其他代码 } ``` 接下来,你可以编写一个工具类,使用反射来读取注解并实现相应的功能: ```java import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class JsonUtils { public static String toJson(Object obj) { Class<?> clazz = obj.getClass(); Map<String, Object> jsonMap = new HashMap<>(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(JsonField.class)) { JsonField jsonField = field.getAnnotation(JsonField.class); String fieldName = jsonField.value(); if (fieldName.isEmpty()) { fieldName = field.getName(); } field.setAccessible(true); try { Object value = field.get(obj); jsonMap.put(fieldName, value); } catch (IllegalAccessException e) { e.printStackTrace(); } } } // 将jsonMap转换为JSON字符串 // ... return jsonString; } } ``` 在上述示例中,我们使用了反射来获取类的字段,并判断字段是否被@JsonField注解标记。如果被标记,则获取注解的值作为属性的名称,并将属性的值存储在一个Map中。最后,你可以将该Map转换为JSON字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值