使用jackson数据绑定注释将java对象附加到另一个对象



我需要用java将json数据发送到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);
}

Java类,其中我设置其他与emp相关的数据,例如userId

public Emp createEmp(empId, /*other emp related data*/){
Data data = new Data();
data.setEmpID(empId); 
//append clientIp to this data object
ConvertToJSON(data);
}

在另一个服务类中,我使用jackson绑定将这些数据转换为json格式的字符串。在这里,我想将之前设置的clientIp附加到这个数据中,这样我就可以将整个数据对象转换为json格式的字符串

类,其中am将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存储到web过滤器的会话属性中,如下所示:

String clientIP = httpServletRequest.getRemoteAddr();
HttpSession session = httpServletRequest.getSession();
session.setAttribute("X-CLIENT-IP", clientIP);

然后,如果您有HttpServletRequest request的声明,则可以使用request.getSession().getAttribute("X-CLIENT-IP").toString()来检索客户端IP
之后,您可以将其作为mehtodcreateEmp的参数传递,例如

public Emp createEmp(empId, clientIp) {
Data data = new Data();
data.setClientIP(clientIp);
data.setEmpID(empId);
...
}

最新更新