Spring Controller @RequestMapping не поддерживает не английские специальные символы - PullRequest
0 голосов
/ 12 декабря 2018

В настоящее время я работаю над старым весенним приложением, которое предоставляет REST API для мобильных устройств.Мне нужно создать новый сервис REST для запроса Json с поддержкой нескольких языков.Но когда я тестирую это, он поддерживает только английский.Когда я пытаюсь с другим языком, это дает мне ?????символы для соответствующих данных.

Ниже приведен мой класс конфигурации

@Configuration
@EnableScheduling
@ComponentScan(basePackages = "lk.test.com.controller")
public class ControllerConfig extends WebMvcConfigurationSupport {

    private static final Logger log = LoggerFactory.getLogger(ControllerConfig.class);

    @Override
    public void configureMessageConverters(final List<HttpMessageConverter<?>> converters) {
        converters.add(getMappingJackson2HttpMessageConverter());
        addDefaultHttpMessageConverters(converters);
    }

    @Bean
    public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(getObjectMapper());
        List<MediaType> mediaTypes = new ArrayList<MediaType>();
        mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        converter.setSupportedMediaTypes(mediaTypes);
        return converter;
    }

    @Bean
    public ObjectMapper getObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
        objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

        return objectMapper;
    }

}

Ниже приведен пример метода контроллера

@RequestMapping(value = "send/push", method = RequestMethod.POST,consumes = "application/json;charset=UTF-8", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public Response sendPush(final @RequestBody CustomerExternalRequest request, HttpServletRequest servletRequest) {

        System.out.println(request.getPushMessage());
        Response response = new Response();
        return response;
    }

и соответствующий объект запроса

@Getter
@Setter
@ToString
public class CustomerExternalRequest extends Request{

    private String phoneNo;

    //push send
    private Boolean isOnlyToCurrenltyLoggedDevice;
    private String pushMessage;
    private String pushTitle;
}

мой запрос Json

{"request":{"phoneNo":"+94776587745","isOnlyToCurrenltyLoggedDevice":true,"pushMessage":"测试","pushTitle":"测试"}} 

А это мой запрос POSTMAN

System.out.println(request);

печатает ??в консоли

Может кто-нибудь знает, как это решить?Спасибо.

1 Ответ

0 голосов
/ 13 декабря 2018

Наконец-то нашли причину и решение.

Когда я попробовал с примером приложения с весенней загрузкой, это сработало.Потому что он имеет встроенный сервер Tomcat.В моем случае я использовал плагин Eclipse Jetty.Затем я нашел место для изменения типа кодировки и изменил его на UTF-8, и теперь он работает нормально.

См. Снимок экрана конфигурации здесь

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