Я использую приложение Spring-Web с использованием jetty:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
Предположим, что эта конечная точка http:
@RestController
public class ExampleController {
@GetMapping(value = "/example", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ExampleResponse example() {
return new ExampleResponse();
}
public static class ExampleResponse {
private String dummy = "example";
public String getDummy() {
return dummy;
}
}
}
и свернитесь с конечной точкой и осмотрите заголовок curl -v localhost:8080/example
:
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /example HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 08 Oct 2019 13:52:10 GMT
< Content-Type: application/json;charset=utf-8
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
Обратите внимание charset=**utf-8**
в заголовке ответа, но я устанавливаю заголовок через аннотацию produces=MediaType.APPLICATION_JSON_UTF8_VALUE
в значение application/json;charset=UTF-8
. Таким образом, Jetty (с использованием tomcat все работает отлично) устанавливает нижний регистр кодировки в заголовке ответа.
Почему это проблема? Некоторые люди работают с моими конечными точками и проверяют это с помощью JSON Valiadtor (например: https://jsonformatter.curiousconcept.com/).
Этот валидатор ожидает набор символов в UPPERCASE. (См. https://stackoverflow.com/a/48466826/3046582). Так что я могу сделать сthis?
Обновление:
как @Kayaman говорит System.setProperty("org.eclipse.jetty.http.HttpGenerator.STRICT", "true");
перед запуском Spring-Application исправит это.
Я также нашел обходной путь: MimeTypes.CACHE.remove("application/json;charset=utf-8");
решит это.