0

ich wie eine Controller-Methode haben:Frühling Hateoas Deserialize Verbindungen in Payload zu tatsächlichen Entitäten

@RequestMapping(value = "/person", method = RequestMethod.POST) 
public ResponseEntity<?> create(@RequestBody Person person) { 
    personRepository.save(person); 
    return new ResponseEntity<>(HttpStatus.OK); 
} 

Die Person Nutzlast ist (der Link verweist auf die uri der Abteilung):

{ 
    "name": "Barack Obama", 
    "department": "http://localhost:8080/department/1" 
} 

I haben eine PersonResource

public class PersonResource { 
    String name; 
} 

Und ein ResourceAssembler

DepartmentController

@RestController 
@RequestMapping("/department") 
public class DepartmentController { 
    @RequestMapping("/{id}") 
    public ResponseEntity<DepartmentResource> getOne(@PathVariable("id") Long id) { 
    Department dep = departmentRepository.findOne(id); 
    DepartmentResource res = departmentResourceAssembler.toResource(res); 
    return new ResponseEntity<>(res, HttpStatus.OK); 
    } 
} 

Dieses in einem json führen würde wie:

{ 
    "name": "Barack Obama", 
    "_links": { 
    "department": { 
     "href": "http://localhost:8080/department/1" 
    } 
    } 
} 

Nun zum Problem: Wenn ich das schaffen-Request mit der Nutzlast, Jackson oder Federauflage senden/HATEOAS kann die Links während der Deserialisierung nicht verarbeiten. Was muss ich konfigurieren/implementieren, damit dies funktioniert?

Danke!

+0

Sie sind verantwortlich für das selbst. Sie können sich Spring Data REST ansehen. – zeroflagL

Antwort

0

Ich denke, hier gibt es eine HttpEntity zurückkehren sollte eher dann ResponseEntity

So wäre es:

@RequestMapping(value = "/person", method = RequestMethod.POST) 
public HttpEntity create(@RequestBody Person person) { 
    personRepository.save(person); 
    return new ResponseEntity<>(HttpStatus.OK); 
} 

Auch was DepartmentController aussieht?

+0

Ich habe den Abteilungscontroller hinzugefügt, aber diese Frage betrifft nicht die Serialisierung, sondern die Deserialisierung der Verknüpfungen. ResponseEntity funktioniert gut (und ist übrigens eine Unterklasse von HttpEntity). – Benny

0

Ihre angegebenen Ressourcenklassen müssen sich von den Klassen unterscheiden, die von den GET-Endpunkten zurückgegeben werden. Sie müssen Elemente enthalten, die die zu verknüpfende Ressource identifizieren, als Sie selbst lösen müssen.

Wenn Sie in diesem Beispielprojekt aussehen https://github.com/opencredo/spring-hateoas-sample und speziell auf BookController, können Sie sehen, wie eine neue Book gebucht wird und im Zusammenhang Author s sind

aufgelöst