生成响应对象的最佳实践

时间:2016-02-08 13:35:49

标签: java json

我有弹簧休息服务器。 有很多请求,其中一个参数是fields字段是服务器应该返回的字段集。像:/?fields=[id,name]和服务器应该返回两个字段的JSON对象 我想知道产生这种反应的最佳做法是什么。 我们这样做:

private Map<String, Object> processBook(BookEntity book, Set<String> fields, String locale){
        Map<String, Object> map = new HashMap<String, Object>();
//..
        if(fields.contains(ID)){
            map.put(ID, book.getId());
        }
        if(fields.contains(ISBN)){
            map.put(ISBN, book.getIsbn());
        }
        if(fields.contains(DESCRIPTION)){
            if(locale.equals(UserLocale.UK))        map.put(DESCRIPTION, book.getDescriptionUa());
            else if(locale.equals(UserLocale.RU))   map.put(DESCRIPTION, book.getDescriptionRu());
            else                                    map.put(DESCRIPTION, book.getDescriptionEn());
        }
//..
        return map;
    }

也许有更好的选择?

3 个答案:

答案 0 :(得分:1)

请注意,在您的情况下,您从DB获取所有数据 - 完全填充 BookEntity 对象,然后仅显示请求的字段。

在我看来,将字段列表委托给适当的下游集成调用并且仅使用必要字段获取 BookEntity 对象是“更好的选择”。然后上面提到的方法将减少到只有一行,您的数据库响应将更加轻量级,因此它将为您的系统带来简单性和优化收益。

任何足够的DB都提供这样的功能:SQL或NoSQL等。

P.S。加上对象到JSON映射的标准方法,例如顶级的Jackson或GSON。

答案 1 :(得分:0)

您可以拥有并使用所需属性进行对象,而不是添加到地图中,而不是添加地图。

然后您可以使用Google的Gson转换您的地图将对象转换为Json对象。

看一下this快速教程。

答案 2 :(得分:0)

一种方法是使用asMap函数。

 Map<String, Object> map = book.asMap();
 map.keySet().retainAll(fields);