spring 实用注解

本文介绍了一种在Java中将Integer类型的时间戳转换为标准日期时间字符串的方法,并通过自定义的JSON序列化器实现前端友好展示。具体展示了如何使用Jackson库的@JsonSerialize注解配合自定义的JsonIntDateFormatSerializer类,将Integer类型的UNIX时间戳转换为'yyyy-MM-dd HH:mm:ss'格式的字符串。

1、实体类属性加注解,Integer时间转时间戳,用于前端展示

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
@JacksonAnnotationsInside
@JsonSerialize(using = JsonIntDateFormatSerializer.class)
public @interface JsonIntDateFormat {
}
​
public class JsonIntDateFormatSerializer extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer date, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if(null!=date){
            DateTime dateTime = new DateTime(date * 1000L);
            gen.writeString(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
        }else {
            gen.writeString("");
        }
    }
}
​
public class SecurityOpExceptionInfo{
    private String uuid;//   uuid
    @JsonIntDateFormat
    private Integer loginTime;//   登录时间
}

 

### 常用 Spring 框架注解及其使用方法 #### 1. 组件扫描与定义注解 为了简化配置并提高开发效率,Spring 提供了一系列的核心功能注解来标注不同类型的组件。`@Service`, `@Repository`, 和 `@Controller` 分别用于标识服务层、持久层和控制器层的组件[^1]。 ```java @Service public class UserService { public String getUserInfo() { return "User Info"; } } ``` #### 2. 测试环境下的特殊行为控制 在编写单元测试时,可以通过 `@RunWith(SpringRunner.class)` 来指定自定义的 JUnit 运行器,从而允许加载 Spring 上下文和支持依赖注入等功能。配合 `@ContextConfiguration` 可以进一步定制化测试环境设置[^2]。 ```java @RunWith(SpringRunner.class) @ContextConfiguration(classes = AppConfig.class) public class MyTest { @Autowired private ApplicationContext context; @Test public void testApplicationContext() throws Exception { assertNotNull(context); } } ``` #### 3. AOP 编程支持 面向切面编程(AOP)是 Spring 的一个重要特性之一,提供了 Before, After Returning, Throws 和 Around 四种不同类型的通知机制,可以用来实现横切关注点逻辑分离的目的[^4]。 ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint){ System.out.println("Method Name : " + joinPoint.getSignature().getName()); } @AfterReturning(pointcut="execution(* com.example.service.*.*(..))", returning="result") public void afterReturn(Object result) { System.out.println("Result is "+result.toString()); } // 更多通知省略... } ``` #### 4. 自动装配与Bean管理优化 当项目结构较为复杂时,可能需要手动扩展默认的包路径扫描范围,这时就可以利用 `@ComponentScan` 明确指出哪些包应该被纳入考虑范围内[^5]。 ```java @SpringBootApplication @ComponentScan(basePackages={"com.demo.springboot","com.demo.somethingelse"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值