2016-04-04 2 views
1

Я пытаюсь получить результат, отправив параметр запроса url на японском языке, как показано ниже. Образец URL-адреса https://xyz/accounts?name=お金Запрос запроса не выполняется для запроса param на японском языке

Применяется ли практика отправки параметров запроса на японском или других языках. Если это будет сделано в следующем коде? Данный код уже был протестирован и работает для значений параметров запроса на английском языке, например name = data.

Кроме того, если я выполняю запрос к базе данных, он отлично работает и возвращает результат.

выберите a.id, a.plan, p.name из учетной записи внутренний план соединения p на a.plan = p.id где (a.id в (1, 2, 3)) и p.name = 'お 金' заказать по p.name asc;

Но при передаче этого значения значения параметра, используя запрос критериев, он просто дает пустой массив.

public List<AccountEntity> createCriteriaQuery(final List<String> accountIdList, 
       final MultiValueMap<String, String> allRequestParams) { 
    final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 

      final CriteriaQuery<AccountEntity> cq = cb.createQuery(AccountEntity.class); 
      final Root<AccountEntity> accountEntity = cq.from(AccountEntity.class); 

      final Join<AccountEntity, PlanEntity> account = accountEntity.join(AccountEntity_.planEntity); 

      final List<Predicate> predicates = new ArrayList<Predicate>(); 

      // Default Predicates for accounts 
      predicates.add(accountEntity.get(AccountEntity_.id).in(accountIdList)); 

      if (!allRequestParams.isEmpty()) {    
       if (allRequestParams.containsKey(ApplicationConstants.QUERYPARAM_PLANNAME)) { 
        final String planName = allRequestParams.get(ApplicationConstants.QUERYPARAM_PLANNAME).get(0); 

        // For planName we check for "contains" which is sql like query 
        predicates.add(cb.like(account.get(PlanEntity_.name), "%" + planName + "%")); 
       } 
      } 

Она добавляется к предикатам, когда я отладки приложения я могу видеть, что его было добавлено точно так же, как, Что было передано в URL, но я предполагаю, что это не может создать запрос по какой-то причине в нижеуказанные шаги. Также, когда я печатаю имя плана, я получаю ??

cq.select(accountEntity).where(predicates.toArray(new Predicate[] {})); 
       cq.orderBy(cb.asc(account.get(PlanEntity_.name))); 
       final TypedQuery<AccountEntity> qry = entityManager.createQuery(cq); 
       final List<AccountEntity> accountEntityList = qry.getResultList(); 

     //So I get accountEntityList as []  

     entityManager.close(); 
       return accountEntityList; 
      } 

Позвольте мне знать, если мне нужно предоставить какие-либо другие детали.

+0

проверить, поддерживает ли ваше соединение db значения sql в unicode –

+0

@SashaSalauyou Да, он поддерживает значения unicode. – Arun

ответ

1

Это решило проблему. Мы используем Spring boot, я добавил этот файл (? UseUnicode = yes & characterEncoding = UTF-8) в файл application.yml, и он сработал.

весна:

datasource: 

    url:jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8 

Если у вас есть application.properties то,

spring.datasource.url = JDBC: MySQL: // локальный: 3306/MYDB useUnicode = да & characterEncoding = UTF -8

Смежные вопросы