You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ResponseDto添加令牌数据?附相关DTO定义与登录响应示例

问题:如何将令牌数据填充到登录响应DTO中?

已定义的相关代码

UserDto类

class UserDto{
    Long id;
    String name;
    String email;
    String password;
}

目标登录响应格式

{
   "user":{
      "id":"1",
      "name":"imesh"
   },
   "token":{
      "access_token":{
         "token":"bhacvyusbi",
         "expired_at":"20200210"
      },
      "refresh_token":{
         "token":"bhacvyusbi",
         "expired_at":"20200210"
      }
   }
}

已创建的响应DTO类

class ResponseDto{
   UserDto user;
   // 注意:此处字段名应为token(与目标JSON的key对应),原reponse是笔误
   AllTokenDto token;
}

class AllTokenDto{
    TokenDto access_token;
    TokenDto refresh_token;
}

class TokenDto{
   String token;
   Date expiredDate;
}

已完成的用户数据映射代码

ResponseDto responseDto = new ResponseDto();
responseDto.setUser(modelMapper.map(userData, UserDto.class));

解决方案

1. 修正ResponseDto的字段名(关键)

原ResponseDto中的reponse字段名与目标JSON的tokenkey不匹配,会导致序列化后JSON结构错误,需先修正:

class ResponseDto{
   UserDto user;
   AllTokenDto token; // 改为token,与目标JSON结构对齐
   // 需补充对应的getter/setter方法
}

2. 构建并填充令牌数据

依次创建令牌实例、包装类,最终设置到ResponseDto中:

// 1. 构建access_token实例
TokenDto accessToken = new TokenDto();
accessToken.setToken("生成的access_token字符串"); // 替换为实际生成的令牌
accessToken.setExpiredDate(new Date(/* 令牌过期时间的Date对象 */));

// 2. 构建refresh_token实例
TokenDto refreshToken = new TokenDto();
refreshToken.setToken("生成的refresh_token字符串"); // 替换为实际生成的令牌
refreshToken.setExpiredDate(new Date(/* 令牌过期时间的Date对象 */));

// 3. 用AllTokenDto包装两个令牌
AllTokenDto allTokenDto = new AllTokenDto();
allTokenDto.setAccess_token(accessToken);
allTokenDto.setRefresh_token(refreshToken);

// 4. 将令牌数据设置到ResponseDto
responseDto.setToken(allTokenDto);

3. 处理日期序列化格式(可选)

目标响应中expired_at是yyyyMMdd格式的字符串,需给TokenDto的expiredDate字段添加序列化注解,确保输出格式匹配:

import com.fasterxml.jackson.annotation.JsonFormat;

class TokenDto{
   String token;
   // 指定日期序列化格式为yyyyMMdd
   @JsonFormat(pattern = "yyyyMMdd")
   Date expiredDate;
   // 补充getter/setter方法
}

完整示例代码

// 初始化响应DTO并设置用户信息
ResponseDto responseDto = new ResponseDto();
responseDto.setUser(modelMapper.map(userData, UserDto.class));

// 构建access token
TokenDto accessToken = new TokenDto();
accessToken.setToken("bhacvyusbi");
accessToken.setExpiredDate(java.sql.Date.valueOf("2020-02-10"));

// 构建refresh token
TokenDto refreshToken = new TokenDto();
refreshToken.setToken("bhacvyusbi");
refreshToken.setExpiredDate(java.sql.Date.valueOf("2020-02-10"));

// 包装令牌并设置到响应DTO
AllTokenDto allTokenDto = new AllTokenDto();
allTokenDto.setAccess_token(accessToken);
allTokenDto.setRefresh_token(refreshToken);
responseDto.setToken(allTokenDto);

内容的提问来源于stack exchange,提问作者Imesh Madushanka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:45:39