【问题标题】:Append java object to another using jackson databind annotation使用杰克逊数据绑定注释将java对象附加到另一个
【发布时间】:2019-10-29 08:35:34
【问题描述】:

我需要将 json 数据发送到 java 中的 post call。以下是代码

我的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

【问题讨论】:

  • 因为对于方法doFilter,您创建一个Data 的实例来设置clientIP,而对于方法createEmp,您创建另一个Data 的实例来设置empId
  • @LHCHIN 我知道,这就是它显示为空的原因。我的问题是,有没有其他方法可以将 clientIp 附加到新的实例?
  • 你在哪里调用createEmp方法?
  • @Iris_geek 一种方法是存储clientIP 信息。进入会话,然后在调用方法createEmp 时从会话中检索它并设置它。

标签: java json jackson-databind


【解决方案1】:

正如我在评论中所说,一种简单的方法是将clienIP 存储到您的网络过滤器的会话属性中,如下所示:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多