嵌套两个弹簧模型



我尝试嵌套两个模型,所以我的响应应该如下所示:

{
    "name": "some_name",
    "value": ["value1", "value2"],
    "details": {
        "name": "Test name",
        "surname": "Test surname",
        "phone": "Test phone",
        "email": "Test email"
    }
}

我有工作的CRUD MongoDB API,但这里有些不对劲。我在控制器中的"详细信息"为 null。

对象:com.user.model.User@7fe8380d[_id=空,名称=some_name,值=[值 1,值 2],详细信息=空]

让我向您展示到目前为止我所做的工作:

控制器:

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import org.apache.commons.lang3.builder.ToStringBuilder;
@RestController
@RequestMapping("/someaction")
public class UserController {
    private final UserService service;
    public UserController(UserService service) {
        this.service = service;
    }
    @RequestMapping(value = "", method = RequestMethod.POST)
    public User createUser(@Valid @RequestBody User user) {
        System.out.println("An object: " + ToStringBuilder.reflectionToString(user));
        return service.createUser(user);
    }
}

服务:

import com.inpost.user_registration.repository.UserRegistrationRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.bson.types.ObjectId;
@Service
public class UserService {
    @Autowired
    private UserRepository repository;
    public User createUser(User user) {
        user.set_id(ObjectId.get());
        repository.save(user);
        return user;
    }
}

存储 库:

import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepository extends MongoRepository<User, String> {
    User findBy_id(ObjectId _id);
}

"详细信息"的模型:

public class Details {
    private String name;
    private String surname;
    private String phone;
    private String email;
    public Details() {
    }
    public Details(String name, String surname, String phone, String email) {
        this.name = name;
        this.surname = surname;
        this.phone = phone;
        this.email = email;
   }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSurname() {
        return surname;
    }
    public void setSurname(String surname) {
        this.surname = surname;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "Details [_id=" + name + ", env=" + surname + ", services=" + phone + ", email=" + email + "]";
    }
}

"用户"的模型:

import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import java.util.ArrayList;
public class User {
    @Id
    public ObjectId _id;
    public String name;
    public ArrayList<String> value;
    public Details details;
    public User() {}
    public User(ObjectId _id, String name, ArrayList<String> value, Details details) {
        this._id = _id;
        this.name = name;
        this.value = value;
        this.details = details;
    }
    public String get_id() {
        return _id.toHexString();
    }
    public void set_id(ObjectId _id) {
        this._id = _id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public ArrayList<String> getValue() {
        return value;
    }
    public void setValue(ArrayList<String> value) {
        this.value = value;
    }
    public Details getDetails() {
        return details;
    }
    public void setDetails(Details details) {
        this.details = details;
    }
    @Override
    public String toString() {
        return "User [_id=" + _id + ", name=" + name + ", value=" + value + ", details=" + details + "]";
    }
}

现在,当我尝试保存"名称"和"值"时,一切正常。当我尝试发布"详细信息"时,我得到空

{
    "_id": "5c4c5c3f7a56c12578122d73",
    "name": "some_name",
    "value": [
        "value1",
        "value2"
    ],
    "details": null
}

任何人都可以帮我吗?在某个地方,我跳过了一些重要的事情。

我认为您需要专门调用保存在详细信息实体或使用CascadeType.ALL对其进行注释,以便在持久保存用户实体时完成详细信息实体的自动持久化。

最新更新