有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql将请求主体作为JSON存储到Java数据库中

我想将请求主体存储到数据库中。我正在将标题和请求存储到审计跟踪表中

对于标题的转换,我创建了一个映射,然后将json存储到数据库中,如下所示:

        String method = httpServletRequest.getMethod();
        Enumeration<String> values = httpServletRequest.getHeaderNames();
        Map<String,String> headers = new HashMap<String, String>();

        while (values.hasMoreElements()) {
            String key = values.nextElement();
            String innerValue = (String)httpServletRequest.getHeader(key);
            headers.put(key,innerValue);
        }

       // converting object to Array
       auditTrail.setHeaders(appUtility.objectToString(headers));

如何将请求主体作为json存储到数据库中(暂时忽略文件)?请求主体可以是一个对象、对象数组或组合

现在,我已经编写了一个方面,它将所有传入的请求存储到数据库中。当我知道对象时,存储对象的json很容易,但是我们如何使其通用


共 (1) 个答案

  1. # 1 楼答案

    如果您知道内容是JSON,并希望从流中读取数据,则可以通过以下方式执行:

    String jsonBody = request.getReader().lines()
       .collect(Collectors.joining(System.lineSeparator()));
    

    如果需要验证jsonBody是否真的是JSON,可以使用Jackson:

    public static boolean isJSONValid(String jsonInString ) {
     try {
         final ObjectMapper mapper = new ObjectMapper();
         mapper.readTree(jsonInString);
         return true;
      } catch (IOException e) {
         return false;
      }
    }
    

    如果你有一个身体作为对象,你可以使用杰克逊

    例如:

    SomeObject body = ...; // Your body
    ObjectMapper objectMapper = new ObjectMapper();
    String bodyAsString = objectMapper.writeValueAsString(body); // To JSON
    body = objectMapper.readValue(bodyAsString, SomeObject.class); // From JSON
    

    Jakson和maven:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>