对嵌套对象使用 objectmapper

Using objectmapper for nested objects

我在另一个对象中有一个对象。当我使用 ObjectMapper 询问 Servlet.java 中的 key1 值时,我将得到 A(key1={key2=[1, 5, 7]}),但我想知道如何分离 key2 列表值。

字符串输入:{"key1":{"key2":[1,5,7]}}

最终结果:13 -> calculated from key2 array values (1 + 5 + 7)

基本上,我已经完成了所有事情,但是仍然缺少从 key2 获取值。

A.java

package servlet;

import lombok.Data;

@Data
public class A {
    public Object key1;
}

B.java

package servlet;

import lombok.Data;
import java.util.ArrayList;
import java.util.List;

@Data
public class B{
    List<Integer> key2 = new ArrayList<>();

}

Servlet.java

package servlet;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.stream.Collectors;

@WebServlet("/validate")
public class Servlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
            throws IOException {

        response.getWriter().print("Hello!");
    }

    @Override
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response) throws IOException {

        String input = request.getReader().lines().collect(Collectors.joining("/n"));

        A a = new ObjectMapper().readValue(input, new TypeReference<A>() {});
        System.out.println(a); // A(key1={key2=[1, 5, 7]})
        System.out.println(a.getKey1()); // {key2=[1, 5, 7]}

        // Object in object ?

        int sum = 0;
        String output = new ObjectMapper().writeValueAsString(sum);
        response.getWriter().write(output);
    } 
}

如何从中分离出 key2 来计算 key2 数组值的总和?

另一个限制是我不能使用拆分、替换、匹配等

所以基本上,我只需要使用 B class 而不是 Object

package servlet;

import lombok.Data;

@Data
public class A {
    public B key1;
}

并在 servlet 中从 A class 询问 key1、key2 并循环它们

@Override
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response) throws IOException {

        String input = request.getReader().lines().collect(Collectors.joining("/n"));

        A a = new ObjectMapper().readValue(input, new TypeReference<A>() {});

        int sum = 0;
        for (Integer b: a.getKey1().getKey2()) {
            sum += b;
        }

        String output = new ObjectMapper().writeValueAsString(sum);
        response.getWriter().write(output);
    }