我想为JSON响应创建一个有用的库。在Java中,我已经这样了。我现在开始使用Go,并且不知道如何转换我的Java代码。我读过Go没有像泛型一样的东西,但我怎么能解决我的问题?
我在谈论代码的以下部分:
@Data
public class ServiceResult<T extends Serializable> implements Serializable {
private ServiceResultStatus status;
private String type;
private T content;
private String hash;
private String destination;
private HashMap<String, Metadata> metadata = new HashMap<>();
...
服务结果的想法是为RESTful Web服务提供结构模式。如果您需要更多信息,请参阅我在Github上的回购链接:https://github.com/Viascom/service-result
服务结果如下所示:
{
"status": "successful",
"type": "ch.viascom.example.models.response.GetTasksResponse",
"content": [
{
"id": "3e99c7fb-0ed7-11e7-a7a5-0050569c3e5a",
"name": "Example Task"
}
],
"hash": "7bf9c04d1e9f8fe7995e4b8beeac1a4c830e7ea",
"destination": "ch.viascom.example.handler.TaskHandler",
"metadata": {
}
}
答案 0 :(得分:2)
您可以将json-mapping直接添加到结构定义中,并使用编码器,解码器来编组和解组它。这些都是内置的,比其他语言更容易,imho。
type ServiceResponse struct {
Value string`json:"nameInJsonResponse"`
}
这是一个来自操场的好例子:https://play.golang.org/p/4L2wMVv7tW
对于您的特定情况,它应该是这样的:
type ServiceResult struct {
Status ServiceResultStatus`json:"status"`
Type string`json:"type"`
Hash string`json:"hash"`
Destination string`json:"destination"`
Metadata map[string]Metadata metadata`json:"metadata"`
}
type ExplizitServiceResult struct {
ServiceResult
Content SomeStruct`json:"content"`
}
https://play.golang.org/p/FFfiq6LxVt
如果您不想从ServiceResult派生每个用户结构,则可以将内容定义为interface{}
,以便可以插入每个结构。我为此更新了我的示例。也许这是解决您问题的最简单方法。
https://play.golang.org/p/LNgreqrnnw