我使用spring boot提供了一个与MongoDB持久化的REST接口.我正在使用"标准"依赖项来支持它,包括spring-boot-starter-data-mongodbspring-boot-starter-web.

然而,在我的一些类中,我对字段进行了注释@Transient,这样MongoDB就不会保留这些信息.然而,我确实希望在我的rest服务中发送这些信息.不幸的是,MongoDB和rest控制器似乎都共享该注释.因此,当我的前端接收到JSON对象时,这些字段不会被实例化(但仍然被声明).删除注释允许字段在JSON对象中通过.

我如何分别为MongoDB和REST配置什么是瞬态的?

这是我的课

package com.clashalytics.domain.building;

import com.clashalytics.domain.building.constants.BuildingConstants;
import com.clashalytics.domain.building.constants.BuildingType;
import com.google.common.base.Objects;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;

import java.util.*;

public class Building {

    @Id
    private int id;

    private BuildingType buildingType;
    private int level;
    private Location location;
    // TODO http://stackoverflow.com/questions/30970717/specify-field-is-transient-for-mongodb-but-not-for-restcontroller
    @Transient
    private int hp;
    @Transient
    private BuildingDefense defenses;

    private static Map<Building,Building> buildings = new HashMap<>();

    public Building(){}
    public Building(BuildingType buildingType, int level){
        this.buildingType = buildingType;
        this.level = level;
        if(BuildingConstants.hpMap.containsKey(buildingType))
            this.hp = BuildingConstants.hpMap.get(buildingType).get(level - 1);

        this.defenses = BuildingDefense.get(buildingType, level);
    }

    public static Building get(BuildingType townHall, int level) {
        Building newCandidate = new Building(townHall,level);
        if (buildings.containsKey(newCandidate)){
            return buildings.get(newCandidate);
        }
        buildings.put(newCandidate,newCandidate);
        return newCandidate;
    }

    public int getId() {
        return id;
    }

    public String getName(){
        return buildingType.getName();
    }

    public BuildingType getBuildingType() {
        return buildingType;
    }

    public int getHp() {
        return hp;
    }

    public int getLevel() {
        return level;
    }

    public Location getLocation() {
        return location;
    }

    public void setLocation(Location location) {
        this.location = location;
    }

    public BuildingDefense getDefenses() {
        return defenses;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Building building = (Building) o;
        return Objects.equal(id, building.id) &&
                Objects.equal(hp, building.hp) &&
                Objects.equal(level, building.level) &&
                Objects.equal(buildingType, building.buildingType) &&
                Objects.equal(defenses, building.defenses) &&
                Objects.equal(location, building.location);
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(id, buildingType, hp, level, defenses, location);
    }
}

实际上,hpdefenses分别显示为0null.如果我go 掉@Transient号标签,它就会通过.

推荐答案

我用@JsonSerialize解决了这个问题.如果你想让它也被反序列化,你也可以 Select @JsonDeserialize.

@Entity
public class Article {

@Column(name = "title")
private String title;

@Transient
@JsonSerialize
@JsonDeserialize
private Boolean testing;
}

// No annotations needed here
public Boolean getTesting() {
    return testing;
}

public void setTesting(Boolean testing) {
    this.testing = testing;
}

Mongodb相关问答推荐

在单个mongo文档中组合数组与聚合

我无法将文档发送到我的MongoDB集合,因为它告诉我使文档无效

所有文档中嵌套 struct 中的条件匹配-mongodb

Mongo,通过 Lookup 计算多个文档中数组中的项目

MongoDB DB参考返回null值

_id 和 $oid 的区别; mongo 数据库中的 $date 和 IsoDate

Meteor 和 Fibers/bindEnvironment() 是怎么回事?

如何将 MongoDB 集合中的 _id 字段更改为 User_id?

实现 twitter 和 facebook 之类的主题标签

具有最佳插入/秒性能的数据库?

Select 匹配mongodb中两个字段的concat值的记录

如何在 MongoDB 中进行内部连接?

如何在 mongoDB 中聚合巨大的数组?

如何在mongoose中加入两个集合

$orderby 和 Sort 之间的 MongoDB 区别

如何在java中删除mongodb集合中的所有文档

PyMongo 中的警告消息:count is deprecated

MongoError:Can't extract geo keys from object

MissingSchemaError:Schema hasn't been registered for model

如何使用 Spring 的 MongoTemplate 和 Query 类检索字段子集?