2015-11-11 3 views
0

У меня есть простой пружинные данные/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 ошибается?

+0

Можете ли вы добавить дополнительную информацию, такую ​​как stacktrace? – reos

ответ

0

Выяснил это. В классе My Position() отсутствовал установщик для positionId. Как-то я пропустил это. Во всяком случае, с все типичные ожидаемые геттеры и сеттеры, которые он десериализует сейчас просто отлично.

Смежные вопросы