使用ObjectMapper

时间:2016-06-01 15:48:40

标签: amazon-web-services amazon-dynamodb

我对编码一般都很陌生,所以这是我的第一次尝试,所以如果我提出愚蠢的问题,请不要开枪;)现在我甚至无法理解广阔的后端世界。

所以我在服务方面遇到了一些问题,甚至决定哪种方式最好,扫描,查询......什么?

所以我想 - 我的方法就是扫描......我很难根据该项目的ID从数据库中检索项目。检索所有项目就像一个魅力,我需要类似的东西来获得一个项目。我在搜索网页时感到困惑,甚至不理解scanfilter,scanexpression这样的差异?这就是为什么我甚至没有想出一个好的尝试......但我需要的是扫描桌面并检索具有匹配ID的项目。我试着查看我的方法来检索所有的searchCases,并实现它来检索它,因为它应该看起来完全相同,但没有成功......

EDITED方法:方法我需要帮助:

public SearchCase getSearchCase(String id){
    //this is obviously for a list, but how do I do it for ONE item?
    HashMap<String, AttributeValue> sc = new HashMap<String, AttributeValue>();
    sc.put("scId", new AttributeValue().withS(id));

    ScanRequest scanRequest = new ScanRequest()
            .withTableName(searchCaseTableName)
            .withFilterExpression("id = scId");

    ScanResult scanResult = client.scan(scanRequest);
      ?????
    return searchCase;
}

作为参考,这里是检索所有项目的方法,它确实有效:

public List<SearchCase> getSearchCases() {

    final List<SearchCase> cases = new ArrayList<SearchCase>();

    ScanRequest scanRequest = new ScanRequest()
            .withTableName(searchCaseTableName);

    ScanResult result = client.scan(scanRequest);
    try {
        for (Map<String, AttributeValue> item : result.getItems()) {
            SearchCase searchCase = mapper.readValue(item.get("payload").getS(), SearchCase.class);
            cases.add(searchCase);
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

    return cases;
}

2 个答案:

答案 0 :(得分:0)

它一直是永恒的,但我想我会在6月份发布一个很长一段时间的正确答案。所以这是解决单个项目的解决方案:

u4

这种方法实际上采用了另一种方法,然后我最初认为我会解决这个问题。所以没有Scanrequest,而是使用int size=bytebuffer.getInt(); // ByteBuffer can't be bigger than Integer.MAX_VALUE bytes: if(size<0) throw new IllegalArgumentException( "truncated class file (attribute size "+(size&0xFFFFFFFFL)+')'); // carry on using the int value ordinarily public SearchCase getSearchCase(String id) throws Exception { Table t = db.getTable(searchCaseTableName); GetItemSpec gis = new GetItemSpec() .withPrimaryKey("id", id); Item item = t.getItem(gis); SearchCase searchCase = mapper.readValue(StringEscapeUtils.unescapeJson(item.getJSON("payload").substring(1)), SearchCase.class); return searchCase; } 代替。这因此在JSON中引起了一些时髦的反斜杠,所以在我通过GetItemSpec运行之前我的前端不会接受,否则就像魅力一样。

答案 1 :(得分:-1)

  

根据该项目的ID,我无法从数据库中检索项目

如果要根据某个唯一ID从DynamoDB检索项目,请使用load,其中&#34;使用给定的哈希键加载对象&#34;