Я получаю ошибку, связанную с кодировкой

#oracle #spring-mvc

#Oracle #spring-mvc

Вопрос:

Мне нужна помощь. Я отправляю http-запрос из базы данных oracle в Spring mvc. И в ответ я получаю это HTTP Status 400 – Bad Request Как я могу это исправить? Добавлено utl_http.set_body_charset (req, 'WINDOWS-1251'); , и это тоже не помогло.

С латинскими буквами все работает хорошо. Как только я перехожу на кириллицу, я получаю сообщение об ошибке

запрос (plsql)

 declare

content varchar2(4000) := '{"to":"996707332572","from":"Текст","text":"Тест текст"}';

    begin


       req := utl_http.begin_request(url, 'POST',' HTTP/1.1');
       utl_http.set_header(req, 'user-agent', 'mozilla/4.0'); 
       utl_http.set_header(req, 'Content-Type', 'application/json');
       utl_http.set_header(req, 'Content-Length', length(content));
       utl_http.set_body_charset ('UTF-8');
       utl_http.write_text(req, content);

       res := utl_http.get_response(req);
 

метод в контроллере

     @ResponseBody
    @RequestMapping(value = "/send-msg",method = RequestMethod.POST,
            produces = "application/xml; charset=utf-8")
    public Object sendMsg(@RequestBody SmsBody smsBody) throws Exception
 

Комментарии:

1. Скорее всего, это проблема с URL, а не с телом запроса. Можете ли вы показать URL-адрес? И, вероятно, она отклоняется веб-сервером до того, как попадет в ваш весенний код.

2. И как выглядит тело запроса? Это данные в кодировке JSON, XML или URL? В последнем случае проблема также может заключаться в данных, закодированных в URL.

3. @Codo Сейчас я исправлю соответствующие коды. Вначале я хотел проверить, правильно ли передаются данные. Теперь я изменил код для отправки json. Теперь я получаю неверный запрос

4. @Codo исправил код запроса

5. Указывает контроллер MVC produces = "application/xml; charset=utf-8" . Вопреки распространенному мнению, это не инструкция для контроллера для генерации XML. Вместо этого это инструкция фильтра, в которой говорится: этот метод может использоваться только для запросов, способных принимать XML. Поэтому вам, вероятно, понадобится дополнительный HTTP-заголовок : Accept: application/xml .