如何在Smithy中实现指定行为的RESTful端点并解决输出错误?
实现建议与修正代码
首先解决你遇到的operation shape output relationships must target a structure shape, but found union错误:Smithy 规定操作的输出必须是结构体(structure)类型,不能使用联合类型(union),所以需要调整输出类型的设计。结合你的需求,以下是符合规范的实现:
修正后的完整代码
structure ResultData { user: String, UUID: String, number1: Float, number2: Float, number3: Float } // 用于/results端点的响应:包裹ResultData数组 structure ResultListResponse { @httpPayload // 让数组直接作为HTTP响应体,而非嵌套在字段中 items: list<ResultData> } // /results/{resultsID}的路径参数输入 structure GetResultInput { @required @httpLabel resultsID: String } // 获取结果列表的端点:GET /results @http(code: 200, method: "GET", uri: "/results") operation ListResults { output: ResultListResponse } // 获取单个结果的端点:GET /results/{resultsID} @http(code: 200, method: "GET", uri: "/results/{resultsID}") operation GetResult { input: GetResultInput output: ResultData }
关键调整说明
替换Union输出为结构体
你的需求中,/results/{resultsID}在ID无效时返回空对象{},而ResultData的所有字段都是可选的——当返回一个未设置任何字段的ResultData实例时,序列化后的结果就是{},完全符合需求。因此无需使用Union,直接用ResultData作为输出即可规避错误。修正列表响应的结构
原代码中ResultDataList的member字段不是数组类型,改为list<ResultData>后才能返回JSON数组。加上@httpPayload注解,让数组直接作为响应体(而非{"items": [...]}的嵌套格式),符合你要求的"返回JSON对象列表"的需求。无数据时返回[{}],只需返回包含一个空ResultData实例的数组即可。修正HTTP方法
RESTful规范中,获取资源(资源集合/单个资源)应使用GET方法,而非POST(POST多用于创建资源),因此调整了@http注解中的method值。
内容的提问来源于stack exchange,提问作者ReactNewbie123
相关产品推荐
相关产品推荐

