Gson - 为每个动作避免多个类

时间:2017-11-20 17:00:28

标签: java gson

我正在使用JS,HTML5 websockets和Java作为后端开发网页游戏。我正在使用Gson序列化和反序列化json。

我创建了两个类Message和Data来生成下面的JSON字符串:

  

{" message&#34 ;: setupGame," data":{" width":800,height:800," username":player1 ," Ball":null}

消息类:

public class Message {

private String message;
private Data data;

public Message(String message, Data data) {
    this.message = message;
    this.data = data;
}

数据类:

public class Data {

private int width;
private int height;
private String username;
private Ball ball;

public Data(int width, int height, String username) {
    this.width = width;
    this.height = height;
    this.username = username;
}

public Data(Ball ball) {
    this.ball = ball;
}

正如你在json字符串中看到的setupGame" Ball"按预期为null。我想实现下面的json字符串:

设置游戏:

  

{" message&#34 ;: setupGame," data":{" width":800,height:800," username":player1 }

游戏更新:

  

{" message&#34 ;: gameUpdate," Ball":{" x":600," y":400}}

我想为每个动作制作两个类,例如:SetupGameMessage,SetupGameData,GameUpdateMessage,GameUpdateData。但是这需要我为我需要的所有json字符串创建10个以上的类。

我想知道是否有更好的方法来保持代码更易于维护并阻止所有这些单独的类(每个操作的消息和数据)。

1 个答案:

答案 0 :(得分:1)

如果您的消费者是一种非严格类型的JavaScript语言,您可以使用“int code; String payload”元组创建一个通用的Request / Response对象,并(de)将服务层POJO序列化为一个JSON字符串,并将其填入“有效负载”。

虽然有点hacky,所以我通常会花费精力为每个特定端点创建特定的,类型化的请求/响应对。这有利于单元测试,并避免了尝试创建一个“所有终端所有东西”的POJO的问题,这可能是大多数时候真的很糟糕的想法。

查看谷歌的AutoValue project - 当你盯着制作一堆课程时,几乎所有用Java编写POJO的痛苦。