Проблемы с кодировкой @RequestHeader - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь получить значение заголовка, которое содержит турецкие символы, такие как «ı, ğ, ü, ş, ö, ç».Я попытался добавить поддержку кодировки ISO-8859-1 в конфигурацию весенней загрузки, но не смог.Вот содержимое файла application.properties

spring.http.encoding.charset=ISO-8859-1
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.http.encoding.force-request=true
spring.http.encoding.force-response=true

А вот пример пост-сопоставления, который принимает параметр name в качестве заголовка запроса.

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SampleController {

    @PostMapping(value = "/api/hello", consumes = "application/json", produces = "application/json")
    public ResponseEntity<String> samplePost(@RequestHeader("name") String name)  {
        System.out.println("name : " + name);
        return ResponseEntity.ok("Hello " + name);
    }
}

Вы можете найти пример curl и System.out.println результат ниже

Curl:

curl -X POST   http://127.0.0.1:8080/api/hello   -H 'Accept: application/json'   -H 'Content-Type: application/json; charset=UTF-8'   -H 'name: ığüşöç'

Вывод:

name : ıÄüÅöç

Есть идеи?

1 Ответ

0 голосов
/ 21 февраля 2019

Вы должны использовать url-кодировку в http-заголовках:

$ curl -X POST   http://127.0.0.1:8080/api/hello   -H 'Accept: application/json'   -H 'Content-Type: application/json; charset=UTF-8'   -H 'name: %C4%B1%C4%9F%C3%BC%C5%9F%C3%B6%C3%A7'
package pro.kretov.spring.boot;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

@RestController
public class SampleController {

    @PostMapping(value = "/api/hello", consumes = "application/json", produces = "application/json")
    public ResponseEntity<String> samplePost(@RequestHeader("name") String name) throws UnsupportedEncodingException {

        System.out.println("name : " + URLDecoder.decode(name, "UTF-8"));
        return ResponseEntity.ok("Hello " + URLDecoder.decode(name, "UTF-8"));
    }
}

Ответ:

Hello ığüşöç

application.properties пусто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...