У меня есть простой пружинные данные/JPA объект с составным первичным ключом:пружины контроллер остального Составные первичный ключ
@Entity
@Table(name = "position")
public class Position implements Serializable {
@EmbeddedId
private PositionId positionId;
@Column(name="heading")
private Double heading;
...
и
@Embeddable
public class PositionId implements Serializable {
private String hexIdent;
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
...
Я пытаюсь к созданию REST контроллеру создайте объект Position. Мой контроллер метод создания выглядит следующим образом:
@RequestMapping(method=POST,
consumes=APPLICATION_JSON_VALUE,
produces=APPLICATION_JSON_VALUE)
public ResponseEntity<Position> createPosition(@RequestBody Position newPosition) {
Position position = positionService.create(newPosition);
return ResponseEntity.ok().body(position);
}
и JSON Я посылаю выглядит так:
{
"positionId":{"hexIdent":"abc123","timestamp":"Tue Nov 10 15:20:43 MST 2015"},
"verticalRate":3.2,
"heading":90.2,
"groundSpeed":123.2,
"lon":25.2,
"lat":25.2
}
Когда служба запущена, она не может решить PostionId (NPE) из входящего JSON (positionId, что служба REST создает в вызове метода является нулевой, то он на самом деле не будет работать на вызов хэш-код() из positionId)
Вот тест службы:
@Test
public void testCreatePosition() throws Exception {
JSONObject p003Id = new JSONObject();
p003Id.put("hexIdent", "abc123");
//p003Id.put("timestamp", new Date());
JSONObject p003 = new JSONObject();
p003.put("positionId", p003Id);
p003.put("lat", 25.2D);
p003.put("lon", 25.2D);
p003.put("heading", 90.2D);
p003.put("groundSpeed", 123.2D);
p003.put("verticalRate", 3.2D);
String jsonString = p003.toString();
given().
contentType("application/json").
body(jsonString).
when().
post("/position").
then().
statusCode(HttpStatus.SC_OK).
contentType(ContentType.JSON).
body("hexIdent", equalTo("abc123")).
body("lat", equalTo(25.2D)).
body("lon", equalTo(25.2D));
}
Есть ли уловка для определения составного первичного ключа в данных spring-data/jpa или управления этим в контроллере пружинного упора? Неужели мой json ошибается?
Можете ли вы добавить дополнительную информацию, такую как stacktrace? – reos