java通过注解解决属性值更换 例如1000转换为10 除以100的操作

package com.mryt.cps.oms.center.util.serializer;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 2 * @Author: quhao
 * 3 * @Date: 2018/10/13 下午12:00
 * 4
 */

/**
 * 金额 缩小100倍
 */
public class MoneySerializer extends JsonSerializer<Long> {
    /**
     * 此方法用于 在对象序列化时 修改属性值 money/100
     * @param integer
     * @param jsonGenerator
     * @param serializerProvider
     * @throws IOException
     * @throws JsonProcessingException
     */
    @Override
    public void serialize(Long integer, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        Long money=0l;
        if(integer!=null){
            money=integer/100;
        }
        jsonGenerator.writeString(String.valueOf(money));
    }
}

 

Java注解中也可以将参数设置为注解对象的某个属性。具体实现方法是在注解定义时声明成员变量类型为注解类型,然后在使用注解时,通过指定成员变量名和注解对象属性名来传递注解对象属性。例如: ``` @MyAnnotation(value = "example", objectValue = @MyObjectAnnotation(name = "objName", value = "objValue")) public class MyClass { // class body } @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String value(); MyObjectAnnotation objectValue(); String name() default ""; } @Retention(RetentionPolicy.RUNTIME) public @interface MyObjectAnnotation { String name(); String value(); } ``` 在上面的例子中,`@MyAnnotation` 是一个自定义注解,其中定义了两个成员变量:`value` 和 `objectValue`,分别为字符串类型和自定义注解类型。在 MyClass 中使用注解时,通过 `value = "example"` 和 `objectValue = @MyObjectAnnotation(name = "objName", value = "objValue")` 来传递对象属性。其中 `@MyObjectAnnotation` 也是一个自定义注解,用来传递对象属性。在 `@MyAnnotation` 中定义了一个 `name` 属性,用来指定注解对象的属性名,如下所示: ``` @MyAnnotation(value = "example", objectValue = @MyObjectAnnotation(name = "objName", value = "objValue"), name = "value") public class MyClass { // class body } ``` 在上面的例子中,通过 `name = "value"` 来指定 `@MyAnnotation` 中的 `value` 属性注解对象的属性名。这样,在使用注解时,就可以通过 `@MyAnnotation` 的 `name` 属性来指定注解对象的属性名,如下所示: ``` MyAnnotation myAnnotation = MyClass.class.getAnnotation(MyAnnotation.class); String objectValue = myAnnotation.objectValue().value(); String value = myAnnotation.name().isEmpty() ? myAnnotation.value() : (String) myAnnotation.objectValue().getClass().getMethod(myAnnotation.name()).invoke(myAnnotation.objectValue()); ``` 在上面的例子中,通过 `MyClass.class.getAnnotation(MyAnnotation.class)` 来获取 `@MyAnnotation` 注解对象,然后通过 `myAnnotation.objectValue().value()` 和 `myAnnotation.name()` 来获取注解对象的属性。其中,通过判断 `myAnnotation.name().isEmpty()` 是否为空来判断是否需要获取注解对象的属性。如果 `name` 属性为空,则直接获取 `value` 属性,否则通过反射获取注解对象的属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值