Вложение двух весенних моделей - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь вложить две модели, поэтому мой ответ должен выглядеть следующим образом:

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

У меня работает CRUD MongoDB API, но что-то здесь не так.У меня есть ноль для «деталей» в контроллере.

Объект: com.user.model.User@7fe8380d [_id = ноль, name = some_name, value = [value1, value2], details = null]

Позвольте мне показать вам, что я сделал до сих пор:

КОНТРОЛЛЕР:

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
}

Кто-нибудь может мне помочь с этим?Где-то пропускаю что-то важное.

1 Ответ

0 голосов
/ 26 января 2019

Я думаю, что вам нужно либо специально вызывать функцию сохранения для сущности Details, либо аннотировать ее с помощью CascadeType.ALL, чтобы выполнить автоматическое сохранение сущности details при сохранении сущности User.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...