java操作dynamodb查询

`package com.example.demo.controller;

import java.util.Map;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.QueryRequest;
import software.amazon.awssdk.services.dynamodb.model.QueryResponse;

@RestController
public class TestController {

@GetMapping("/api/queryStock")
public Map<String, Object> queryStock(@RequestParam("stock_id") String stock_id) {
    String tableName = "testnew";
    String partitionKeyName = "stock_id";

    DynamoDbClient ddb = DynamoDbClient.builder()
            .region(Region.US_EAST_1)
            .build();

    try {
        QueryRequest queryRequest = QueryRequest.builder()
                .tableName(tableName)
                .keyConditionExpression(partitionKeyName + " = :v_stock")
                .expressionAttributeValues(
                        Map.of(":v_stock", AttributeValue.builder().s(stock_id).build()))
                .build();

        QueryResponse response = ddb.query(queryRequest);
        List<Map<String, Object>> items = response.items().stream()
                .map(item -> item.entrySet().stream().collect(Collectors.toMap(
                        Map.Entry::getKey,
                        e -> {
                            AttributeValue val = e.getValue();
                            if (val.s() != null)
                                return (Object) val.s(); // 强制转成 Object
                            if (val.n() != null)
                                return (Object) val.n(); // 强制转成 Object
                            return null;
                        })))
                .collect(Collectors.toList());

        return Map.of(
                "stock_id", stock_id, // 返回查询的 stock_id
                "items", items // 返回查询结果
        );

    } catch (DynamoDbException e) {
        e.printStackTrace();
        // 返回错误信息给前端,保证方法有返回值
        return Map.of("error", e.getMessage());
    }
}

}
`

posted @ 2025-09-06 16:06  ziio  阅读(21)  评论(0)    收藏  举报