I'm making API for GatherTown Map to insert object with spring.
It works fine when using Resttemplate to post request.
I wanted to migrate this to Webclient, so I searched and tried all day, but all failed.
public String withRestTemplate(RequestDto requestDto){
ResponseDto gatherTownMap = getMap(requestDto).share().block();
SampleObject gatherTownSampleMusic = new GatherTownSampleMusic();
gatherTownSampleMusic.setX(10);
gatherTownSampleMusic.setY(10);
gatherTownSampleMusic.sound.setSrc("https://cdn.gather.town/storage.googleapis.com/gather-town.appspot.com/internal-dashboard/sounds/jAlXIofmjkQFHBM_oYl-F");
gatherTownSampleMusic.sound.setLoop(false);
gatherTownSampleMusic.sound.setVolume(0.5);
gatherTownSampleMusic.sound.setMaxDistance(30);
gatherTownMap.getObjects().add(gatherTownSampleMusic);
requestDto.setMapContent(gatherTownMap);
requestDto.setSpaceId(requestDto.getSpaceId().replace("/", "\\").replace("%20", " "));
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<RequestDto> entity = new HttpEntity<>(requestDto, headers);
return restTemplate.exchange(
apiUrl,
HttpMethod.POST,
entity,
String.class
).getBody();
}
My Failed Webclient
public String withWebclient(RequestDto requestDto){
ResponseDto gatherTownMap = getMap(requestDto).share().block();
SampleObject gatherTownSampleMusic = new GatherTownSampleMusic();
gatherTownSampleMusic.setX(10);
gatherTownSampleMusic.setY(10);
gatherTownSampleMusic.sound.setSrc("https://cdn.gather.town/storage.googleapis.com/gather-town.appspot.com/internal-dashboard/sounds/jAlXIofmjkQFHBM_oYl-F");
gatherTownSampleMusic.sound.setLoop(false);
gatherTownSampleMusic.sound.setVolume(0.5);
gatherTownSampleMusic.sound.setMaxDistance(30);
gatherTownMap.getObjects().add(gatherTownSampleMusic);
requestDto.setMapContent(gatherTownMap);
requestDto.setSpaceId(requestDto.getSpaceId().replace("/", "\\").replace("%20", " "));
WebClient client = WebClient.create(apiUrl);
return client.
post().
contentType(MediaType.APPLICATION_JSON).
accept(MediaType.APPLICATION_JSON).
bodyValue(requestDto).
retrieve().
bodyToMono(String.class).block();
}
this is RequestDto Class.
public class RequestDto {
private String apiKey;
private String spaceId;
private String mapId;
private ResponseDto mapContent;
static class ResponseDto {
private String mostRecentUpdateId;
private List<Long> dimensions;
private String foregroundImagePath;
private List<Object> spaces;
private String collisions;
private Boolean isTemplate;
private String backgroundImagePath;
private Long objectSizes;
private Boolean useDrawnBG;
private List<Object> assets;
private String id;
private Boolean isPublic;
private List<Object> announcer;
private List<Object> spawns;
private String version;
private List<Object> objects;
private List<Object> portals;
}
}
How can i migrate my Resttemplate method to Webclient?