Skip to content

Commit aa038ff

Browse files
fix
1 parent b19a4ac commit aa038ff

File tree

4 files changed

+119
-10
lines changed

4 files changed

+119
-10
lines changed

src/main/java/org/gridsuite/study/server/StudyController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ public ResponseEntity<Void> setShortCircuitParameters(
922922
@ApiResponse(responseCode = "200", description = "The short-circuit analysis parameters", content = {
923923
@Content(mediaType = MediaType.APPLICATION_JSON_VALUE /*, schema = ...*/)})
924924
public ResponseEntity<String> getShortCircuitParameters(@PathVariable("studyUuid") UUID studyUuid) {
925-
return ResponseEntity.ok().body(studyService.getShortCircuitParametersInfo(studyUuid));
925+
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(studyService.getShortCircuitParametersInfo(studyUuid));
926926
}
927927

928928
@GetMapping(value = "/studies/{studyUuid}/nodes/{nodeUuid}/network/substations/{substationId}/svg")

src/main/java/org/gridsuite/study/server/StudyWebConfig.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,19 @@
77
package org.gridsuite.study.server;
88

99
import lombok.AllArgsConstructor;
10+
import org.gridsuite.study.server.converter.UuidHttpConverter;
1011
import org.springframework.context.annotation.Configuration;
1112
import org.springframework.format.FormatterRegistry;
13+
import org.springframework.http.converter.HttpMessageConverter;
1214
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
1315

16+
import java.util.List;
17+
1418
@AllArgsConstructor
1519
@Configuration
1620
public class StudyWebConfig implements WebMvcConfigurer {
17-
private InsensitiveStringToEnumConverterFactory insensitiveEnumConverterFactory;
21+
private final InsensitiveStringToEnumConverterFactory insensitiveEnumConverterFactory;
22+
private final UuidHttpConverter uuidConverter;
1823

1924
/**
2025
* {@inheritDoc}
@@ -23,4 +28,12 @@ public class StudyWebConfig implements WebMvcConfigurer {
2328
public void addFormatters(final FormatterRegistry registry) {
2429
registry.addConverterFactory(insensitiveEnumConverterFactory);
2530
}
31+
32+
/**
33+
* {@inheritDoc}
34+
*/
35+
@Override
36+
public void extendMessageConverters(final List<HttpMessageConverter<?>> converters) {
37+
converters.add(uuidConverter);
38+
}
2639
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package org.gridsuite.study.server.converter;
2+
3+
import lombok.NonNull;
4+
import org.jetbrains.annotations.NotNull;
5+
import org.springframework.boot.context.properties.bind.Binder;
6+
import org.springframework.boot.web.servlet.server.Encoding;
7+
import org.springframework.core.env.Environment;
8+
import org.springframework.http.HttpHeaders;
9+
import org.springframework.http.HttpInputMessage;
10+
import org.springframework.http.HttpOutputMessage;
11+
import org.springframework.http.MediaType;
12+
import org.springframework.http.converter.AbstractHttpMessageConverter;
13+
import org.springframework.http.converter.HttpMessageConverter;
14+
import org.springframework.http.converter.HttpMessageNotReadableException;
15+
import org.springframework.http.converter.HttpMessageNotWritableException;
16+
import org.springframework.lang.Nullable;
17+
import org.springframework.stereotype.Component;
18+
import org.springframework.util.MimeType;
19+
import org.springframework.util.StreamUtils;
20+
21+
import java.io.IOException;
22+
import java.nio.charset.Charset;
23+
import java.nio.charset.StandardCharsets;
24+
import java.util.List;
25+
import java.util.Objects;
26+
import java.util.Optional;
27+
import java.util.UUID;
28+
29+
/**
30+
* Implementation of {@link HttpMessageConverter} that can read and write {@link UUID} to/from strings.
31+
*
32+
* @since 2.0
33+
*/
34+
@Component
35+
public class UuidHttpConverter extends AbstractHttpMessageConverter<UUID> {
36+
private final Encoding encoding;
37+
private final List<Charset> availableCharsets = List.copyOf(Charset.availableCharsets().values());
38+
39+
protected UuidHttpConverter(@NonNull final Environment environment) {
40+
super(StandardCharsets.UTF_8, MediaType.TEXT_PLAIN);
41+
encoding = Binder.get(environment).bindOrCreate("server.servlet.encoding", Encoding.class);
42+
}
43+
44+
/**
45+
* {@inheritDoc}
46+
*/
47+
@Override
48+
@NotNull
49+
public Charset getDefaultCharset() {
50+
return Objects.requireNonNullElse(encoding.getCharset(), super.getDefaultCharset());
51+
}
52+
53+
/**
54+
* {@inheritDoc}
55+
*/
56+
@Override
57+
protected boolean supports(final Class<?> clazz) {
58+
return UUID.class == clazz;
59+
}
60+
61+
/**
62+
* {@inheritDoc}
63+
*/
64+
@Override
65+
@NotNull
66+
protected Long getContentLength(UUID uuid, MediaType contentType) throws IOException {
67+
return (long) uuid.toString().getBytes(getContentTypeCharset(contentType)).length;
68+
69+
}
70+
71+
/**
72+
* {@inheritDoc}
73+
*/
74+
@Override
75+
@NotNull
76+
protected UUID readInternal(final Class<? extends UUID> clazz, final HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
77+
return UUID.fromString(StreamUtils.copyToString(inputMessage.getBody(), getContentTypeCharset(inputMessage.getHeaders().getContentType())));
78+
}
79+
80+
/**
81+
* {@inheritDoc}
82+
*/
83+
@Override
84+
protected void writeInternal(final UUID uuid, final HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
85+
final HttpHeaders headers = outputMessage.getHeaders();
86+
if (headers.get(HttpHeaders.ACCEPT_CHARSET) == null) {
87+
headers.setAcceptCharset(this.availableCharsets);
88+
}
89+
StreamUtils.copy(uuid.toString(), this.getContentTypeCharset(headers.getContentType()), outputMessage.getBody());
90+
}
91+
92+
@NotNull
93+
private Charset getContentTypeCharset(@Nullable final MediaType contentType) {
94+
return Objects.requireNonNull(Optional.ofNullable(contentType)
95+
.map(MimeType::getCharset)
96+
.orElseGet(this::getDefaultCharset), "No default charset");
97+
}
98+
}

src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -285,14 +285,13 @@ public UUID createParameters(@Nullable final String parametersInfos) {
285285
.build()
286286
.toUri();
287287
try {
288+
HttpHeaders headers = new HttpHeaders();
289+
headers.setAccept(List.of(MediaType.TEXT_PLAIN));
288290
if (StringUtils.isBlank(parametersInfos)) {
289-
final String strUuid = restTemplate.postForObject(uri, new HttpEntity<>(new HttpHeaders()), String.class);
290-
return UUID.fromString(strUuid);
291+
return UUID.fromString(restTemplate.postForObject(uri, new HttpEntity<>(headers), String.class));
291292
} else {
292-
HttpHeaders headers = new HttpHeaders();
293293
headers.setContentType(MediaType.APPLICATION_JSON);
294-
final String strUuid = restTemplate.postForObject(uri, new HttpEntity<>(parametersInfos, headers), String.class);
295-
return UUID.fromString(strUuid);
294+
return UUID.fromString(restTemplate.postForObject(uri, new HttpEntity<>(parametersInfos, headers), String.class));
296295
}
297296
} catch (final HttpStatusCodeException e) {
298297
throw handleHttpError(e, CREATE_SHORTCIRCUIT_PARAMETERS_FAILED);
@@ -329,12 +328,11 @@ public UUID duplicateParameters(UUID parametersUuid) {
329328
try {
330329
HttpHeaders headers = new HttpHeaders();
331330
headers.setAccept(List.of(MediaType.TEXT_PLAIN));
332-
final String strUuid = restTemplate.postForObject(UriComponentsBuilder.fromUriString(shortCircuitServerBaseUri)
331+
return UUID.fromString(restTemplate.postForObject(UriComponentsBuilder.fromUriString(shortCircuitServerBaseUri)
333332
.pathSegment(SHORT_CIRCUIT_API_VERSION, "parameters")
334333
.queryParam("duplicateFrom", parametersUuid)
335334
.buildAndExpand()
336-
.toUri(), new HttpEntity<>(headers), String.class);
337-
return UUID.fromString(strUuid);
335+
.toUri(), new HttpEntity<>(headers), String.class));
338336
} catch (final HttpStatusCodeException e) {
339337
throw handleHttpError(e, CREATE_SHORTCIRCUIT_PARAMETERS_FAILED);
340338
}

0 commit comments

Comments
 (0)