代码之家  ›  专栏  ›  技术社区  ›  Georgi Michev

如何从HTTP响应中获取mongodb objectId

  •  1
  • Georgi Michev  · 技术社区  · 6 年前

    我正在测试在数据库中保存对象的端点。Post方法按预期工作,对象转到数据库。我正试图找出如何从得到的HTTP响应中获取mongo objectID,这样就可以使用Put和Delete方法进行进一步的测试,因为我需要用于URI的objectID。

    @Test
    public void saveRule() throws URISyntaxException, IOException {
    
        RuleDTO ruleDTO = new RuleDTO();
        ruleDTO.setTitle("My rule");
        ruleDTO.setIndex(666);
    
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(ruleDTO);
    
        String target = "http://localhost:8090" + "/v2/rules"; // fix
        URI uri = new URI(target);
        HttpPost httpPost = new HttpPost(uri.toASCIIString());
        StringEntity entity = new StringEntity(json);
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-type", "application/json");
        httpPost.setEntity(entity);
        HttpResponse response = httpClient.execute(httpPost);
    
        int HTTPcode = response.getStatusLine().getStatusCode();
        HttpEntity getEntity = response.getEntity();
        String getJson = EntityUtils.toString(getEntity);
    
        ObjectMapper objectMapper = new ObjectMapper();
        Rule rule = objectMapper.readValue(getJson, Rule.class);
        boolean isMyRule = false;
    
        if (rule.getTitle().equals("My rule")) {
            isMyRule = true;
        }
    
        boolean correctStatus = HTTPcode >= 200 && HTTPcode <= 300 ? true : false;
    
        assertTrue(correctStatus);
        assertTrue(isMyRule);
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   noob    6 年前

    1. 通常剩下的大部分api都是关于 POST 请求添加记录,返回已添加记录的密钥。 然后,在测试中,只需从对 岗位 你提出的请求,然后用它来 PUT DELETE 请求。
    2. GET 终结点上的请求。然后,对获取的记录进行迭代,直到获得刚插入的记录的键(在本例中为ObjectId),并使用它生成 请求。很明显,这将使测试运行慢得多,特别是当记录数很高时。如果有的话 基于字段进行过滤的端点,例如使用查询参数(例如: /v2/rules?title="My rule"&index="666" 得到
    3. 如果以上两种方法由于任何原因都不可行,并且可以通过测试查询MongoDB集合,那么,留给您的唯一选择(我现在可以想到)可能就是通过测试连接到MongoDB,然后查询您刚刚插入的文档,获取ObjectId,并使用它来创建一个 amd公司 删除 请求。这可能是最不正统的方法,如果您在实际数据库上运行测试,则不建议这样做。但是,如果您计划在模拟数据库上运行它(如果您正在编写端到端测试,我认为您不会这样做),那么这仍然是一条路要走。