java向对象动态添加传统字段
我有一个spring服务,它以.json
的形式返回用户数据
这是公开的。阶级
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import java.util.Date;
import java.util.HashSet;
@Data
public class ArticleUserPublic {
private String username;
private HashSet<Integer> favorites;
@CreationTimestamp
private Date created_at;
}
返回的数据格式如下:
{
"username": "admin",
"favorites": [
1,
2,
3
],
"created_at": "2021-03-17T13:44:10.206+00:00"
}
如何在不修改ArticleUserPublic类的情况下附加额外的“message”字段? 还有更多像UserData这样的类,我想附加这个消息或其他东西
我想要实现的是:
{
"message": "User exist!",
"username": "admin",
"favorites": [
1,
2,
3
],
"created_at": "2021-03-17T13:44:10.206+00:00"
}
我目前的解决方案,也许可以做得更好,目前它以嵌套方式添加对象,我想将其更改为根级别:
自定义消息类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CustomMessage<Obejct> {
private String message;
private boolean status;
private HashMap<String, Obejct> data = new HashMap<>();
public CustomMessage(String message) {
this.message = message;
}
public void add(String key, Object t){
this.data.put(key, (Obejct) t);
}
如何将其他消息添加为HashMap元素:
public CustomMessage<Object> getUser(Long userId) {
var response = new CustomMessage<>();
Optional<ArticleUser> user = userRepository.findById(userId);
if (user.isPresent()) {
response.setMessage("User found!");
response.setStatus(true);
ArticleUserPublic publishUser = new ArticleUserPublic();
publishUser.setUsername(user.get().getUsername());
publishUser.setFavorites(user.get().getFavorites());
publishUser.setCreated_at(user.get().getCreated_at());
response.add("data", publishUser);
} else {
response.setMessage("User not found");
response.setStatus(false);
}
return response;
}
# 1 楼答案
您可以扩展类
ArticleUserPublic
,并添加其他字段。例如:然后像这样使用: