Джерси - @QueryParam и кодировка символов - PullRequest
0 голосов
/ 08 января 2019

Мне нужно передать значение ограничения, которое содержит текст из разных языков UTF (немецкий, сербский, каталанский, китайский, ....) в качестве queryParam в моем HTTP-запросе.

Попытка с использованием URLEncoder.encode и URLDecoder.decode с другой стороны, но не сработала.

Пробовал с использованием UriComponent.encode / decode и тоже не помогло.

Попытка добавления заголовка к моему запросу с кодировкой utf-8.

Пробовал с использованием @ Connsumes / @ Produces / @ Кодированная аннотация jersy, но все та же.

Клиентская сторона:

private static final String ENCODING = "UTF-8";
private static final String CHARSET= "charset=" + ENCODING;

Invocation.Builder builder;
    try {
        builder = baseTarget.path(apiPath + "setConstraint")
                //.queryParam("constraint", constraint)
                .queryParam("constraint",UriComponent.encode(constraint, UriComponent.Type.FRAGMENT))
                .queryParam("path", URLEncoder.encode(jsonRuleIdString, ENCODING))
                .request(MediaType.APPLICATION_JSON)
                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON + "; " + CHARSET );
    } catch (UnsupportedEncodingException ex) {
        throw new SpecificationException(ex.getMessage());
    }

...

Серверная часть:

@RequestMapping (method = RequestMethod.POST, value= "setConstraint")
@Consumes({ MediaType.APPLICATION_JSON + ";charset=UTF-8"})
@Produces({ MediaType.APPLICATION_JSON + ";charset=UTF-8"})
public RuleStruct setConstraint( 
        @RequestParam(value="constraint", required = true) @Encoded String constraint,
        @RequestParam(value="path", required = true) String strPath) throws SpecificationException, ProjectManagementException {

    logger.info("Set Constraint");

    RuleId path;
    try {
        path = strPath.isEmpty() ? null : mapper.readValue(URLDecoder.decode(strPath, ENCODING), RuleId.class);
        constraint = UriComponent.decode(constraint, UriComponent.Type.FRAGMENT);
    } catch (IOException e) {
        throw new SpecificationException(e.getMessage());
    }

    return getRuleEditorService(sessionId).editRule(path).setConstraint(constraint);
}

Привет.

1 Ответ

0 голосов
/ 09 января 2019

После этого поста: http://jersey.576304.n2.nabble.com/QueryParam-and-character-encoding-td6928014.html

Я искал "tomcat query param utf encoding" и нашел это решение: Как установить кодировку запроса в Tomcat?

Как только я добавил URIEncoding = "UTF-8" в мой тег в файле server.xml контейнера tomcat, он работал.

...