Ich habe ein Spring-Boot-Projekt, das eine @RestController und ein Vaadin @SpringUI bietet.Entfernen (vaadin) Servlet-Anweisung im Frühjahr hateos link
die Vaadin ui Zugriff ist möglich durch url: http://localhost:8080/
Durch ui Benutzer-Geräte erstellen. Diese Geräteerstellung erfolgt durch Aufruf meines @RestControllers in meiner Vaadin-Klasse. Der letzte Teil ist die Erstellung des Geräts. Und jetzt beginnt das Problem. Geräteobjekte haben ein hateos Link-Member, das im Konstruktor initialisiert wurde. Die Linkerstellung erfolgt mit Spring ControllerLinkBuilder.
Problem ist, dass die hateos link nicht ordnungsgemäß erstellt wird. Der Link sieht wie folgt aus:
"href": "http://localhost:8080/vaadinServlet/devices/1"
Aber die Verbindung ist wie folgt aussehen (ohne vaadinServlet):
"href": "http://localhost:8080/devices/1"
RestController für die Schaffung neuer Geräte:
@RestController
@RequestMapping("/devices")
public class DevicesRestController {
@RequestMapping(value="/{deviceID}", method=RequestMethod.GET)
@ResponseBody
public HttpEntity<Device> getDevice(@PathVariable("deviceID") int deviceID) {
// return device
}
@RequestMapping(method=RequestMethod.POST)
@ResponseBody
public ResponseEntity<Device> postDevice() {
// return new device
}
}
Vaadin UI Erstellung der Gerät:
public class VaadinController {
@Autowired
private DevicesRestController devicesRestController;
private Device createDevice() {
Device postDevice = devicesRestController.postDevice().getBody();
return postDevice;
}
}
My Device-Klasse mit hateos Link-
public class Device {
private final Link self;
public Device() {
this.self = ControllerLinkBuilder.linkTo(DevicesRestController.class).withSelfRel();
}
}
So lange Geschichte kurz: Wie kann ich von der/vaadinServlet in meinem hateos Link von Spring ControllerLinkBuilder erstellt loswerden?
Edit 1: Sie dieses Problem lösen können ganz einfach, wenn ich die @RestController in meinem VaadinController nicht autowire nur durch die RestTemplate Klasse aufrufen. Siehe den folgenden Code snipped:
public class VaadinController {
private Device createDevice() {
RestTemplate rt = new RestTemplate();
ResponseEntity<Device> postForEntity = rt.postForEntity(new URI("http://localhost:8080/devices/"), <REQUEST_DAT>, Device.class);
return postForEntity.getBody();
}
}
Aber ich denke, dass nicht best practice ist und eine ‚nicht so sauber‘ Art und Weise, das zu tun. Also meine Frage ist immer noch die gleiche: Wie die/vaadinServlet Informationen in meinem hateos-Link zu entfernen?