Java 发布时,SpringREST无法反序列化嵌套对象

Java 发布时,SpringREST无法反序列化嵌套对象,java,spring,jackson,Java,Spring,Jackson,在尝试使用SpringBoot应用程序发布时,我收到一个错误,即嵌套对象为null。下面是代码..有什么想法吗 后请求: { "id": 1, "username": "luisau", "password": "fe4354", "firstName": "Luisa", "lastName": "k", "dob": "2011-07-15", "streetName": "str", "st

在尝试使用SpringBoot应用程序发布时,我收到一个错误,即嵌套对象为null。下面是代码..有什么想法吗

后请求:

  {
      "id": 1,
      "username": "luisau",
      "password": "fe4354",
      "firstName": "Luisa",
      "lastName": "k",
      "dob": "2011-07-15",
      "streetName": "str",
      "streetNumber": "38",
      "city": "town",
      "postalCode": "43546",
      "country": "Germany",
      "registrationTime": "2017-07-13T16:45:34Z",
      "registrationIp": "192.23.45.6",
      "gender": "Female",
      "registrationChannel": {"id": 2}
    }
类别:

@Entity
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    private RegistrationChannel registrationChannel;

    private String email;

    private String username;

    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;

    @Enumerated(EnumType.STRING)
    private Gender gender;

    private char title;

    private String firstName;

    private String lastName;

    @Convert(converter = Jsr310JpaConverters.LocalDateConverter.class)
    private LocalDate dob;

    @Embedded
    @JsonUnwrapped
    private Address address;

    private String registrationIp;

    private Instant registrationTime;

    //getters, setters omitted

Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Column 'registration_channel_id' cannot be null
Query is: insert into customer (city, country, postal_code, street_name, street_number, dob, email, first_name, gender, last_name, password, registration_channel_id, registration_ip, registration_time, title, username) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?), parameters

错误消息很清楚,您的注册频道为空。原因是您不能只发送
注册频道
id,在ORM中,您需要存储
注册频道
对象

例如,在
保存到数据库方法中:

public void save(Customer customer, int registrationChannelId) {
    RegistrationChannel registrationChannel = findRegistrationChannel(registrationChannelId);

   customer.addRegistrationChannel(registrationChannel);

   // save your customer
}
我是这样解决的:

我必须调整POST的有效负载,以包含嵌套资源的url

{
      "id": 1,
      "username": "luisau",
      "password": "fe4354",
      "firstName": "Luisa",
      "lastName": "k",
      "dob": "2011-07-15",
      "streetName": "str",
      "streetNumber": "38",
      "city": "town",
      "postalCode": "43546",
      "country": "Germany",
      "registrationTime": "2017-07-13T16:45:34Z",
      "registrationIp": "192.23.45.6",
      "gender": "Female",
      "registrationChannel": "/registrationChannels/2"
    }

似乎你发布了一半的代码,而另一部分被切断了。你能发布你的RegistrationChannel对象以及保存方法吗?@tima我省略了Breviti的getter和setter。我想只使用一个id,而不是嵌套对象的完整表示