java - 使用杰克逊数据绑定注释将java对象附加到另一个对象
问题描述
我需要将 json 数据发送到 java 中的 post 调用。以下是代码
我的 pojo 课
public class Data{
@JSONProperty("clientIP")
String clientIP;
@JSONProperty("empID")
String empID;
public Data setClientIP(String clientIp){
this.clientIP = clientIp;
return this;
}
public Data setEmpID(String empId){
this.empID = empId;
return this;
}
public String toString(){ /*toString conversion*/ }
}
设置clientIp的过滤器类
public doFilter(ServletRequest request, ServletResponse response){
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String clientIP = httpServletRequest.getRemoteAddr();
Data data = new Data();
data.setClientIP(clientIP);
}
设置其他 emp 相关数据的 Java 类,例如 userId
public Emp createEmp(empId, /*other emp related data*/){
Data data = new Data();
data.setEmpID(empId);
//append clientIp to this data object
ConvertToJSON(data);
}
在另一个服务类中,我使用杰克逊绑定将此数据转换为 json 格式的字符串。在这里,我想将先前设置的 clientIp 附加到此数据中,以便可以将整个数据对象转换为 json 格式的字符串
将 java 对象转换为 json 的类
convertToJSON(Object data){
ObjectMapper mapper = new ObjectMapper();
String jsonString = null;
jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(data);
}
I need output like { clientIP: 123.123.123.123, empID: emp123 }
currently it displays { clientIP: null, empID: emp123} which is obvious
解决方案
正如我在评论中所说,一种简单的方法是将会话clienIP
属性存储到您的网络过滤器中,如下所示:
String clientIP = httpServletRequest.getRemoteAddr();
HttpSession session = httpServletRequest.getSession();
session.setAttribute("X-CLIENT-IP", clientIP);
然后,request.getSession().getAttribute("X-CLIENT-IP").toString()
如果您有HttpServletRequest request
.
之后,您可以将其作为 mehtod 的参数传递,createEmp
例如
public Emp createEmp(empId, clientIp) {
Data data = new Data();
data.setClientIP(clientIp);
data.setEmpID(empId);
...
}
推荐阅读
- assembly - 如何在 nasm x86 的 rax 中返回或读取负符号字节值?
- excel - VBA - 将最后一行公式复制到新行(表)
- ruby - 有谁知道为什么 IRB 在块中给出语法错误?
- node.js - 如何在没有 Gulp 的情况下将 sass 流式传输到 browserSync?
- python - 为什么声音在其余代码之前播放?
- python - 降维 – PCA 解释
- python - 如何在 MEL 中从顶点到顶点绘制曲线
- http - 如何保护 Firebase 云功能
- discord.py - 如何使用 Discord.py 中内置的“命令菜单”?
- linux - 为 linux 制作一个小型可执行文件