相关疑难解决方法(0)

何时将空间编码为加号(+)或%20?

有时,空格会将URL编码为+符号,有时则会%20.有什么区别,为什么会发生这种情况?

urlencode

451
推荐指数
4
解决办法
22万
查看次数

如何在SpringBoot中配置CharacterEncodingFilter?

我在学习Spring Boot时遇到了一些编码问题; 我想添加像Spring 3.x这样的CharacterEncodingFilter.像这样:

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

encoding spring-boot

26
推荐指数
3
解决办法
4万
查看次数

在调用Spring RestController时,使用Spring的RestTemplate转义URL变量的正确方法是什么?

在调用RestTemplate.exchangeget请求时,例如:

String foo = "fo+o";
String bar = "ba r";
restTemplate.exchange("http://example.com/?foo={foo}&bar={bar}", HttpMethod.GET, null, foo, bar)
Run Code Online (Sandbox Code Playgroud)

为get请求正确转义URL变量的正确方法是什么?

具体来说,我如何+正确地转义pluses()因为Spring将其解释为空格,所以,我需要对它们进行编码.

我尝试使用UriComponentsBuilder这样的:

String foo = "fo+o";
String bar = "ba r";
UriComponentsBuilder ucb = UriComponentsBuilder.fromUriString("http://example.com/?foo={foo}&bar={bar}");
System.out.println(ucb.build().expand(foo, bar).toUri());
System.out.println(ucb.build().expand(foo, bar).toString());
System.out.println(ucb.build().expand(foo, bar).toUriString());
System.out.println(ucb.build().expand(foo, bar).encode().toUri());
System.out.println(ucb.build().expand(foo, bar).encode().toString());
System.out.println(ucb.build().expand(foo, bar).encode().toUriString());
System.out.println(ucb.buildAndExpand(foo, bar).toUri());
System.out.println(ucb.buildAndExpand(foo, bar).toString());
System.out.println(ucb.buildAndExpand(foo, bar).toUriString());
System.out.println(ucb.buildAndExpand(foo, bar).encode().toUri());
System.out.println(ucb.buildAndExpand(foo, bar).encode().toString());
System.out.println(ucb.buildAndExpand(foo, bar).encode().toUriString());
Run Code Online (Sandbox Code Playgroud)

并打印:

http://example.com/?foo=fo+o&bar=ba%20r
http://example.com/?foo=fo+o&bar=ba r
http://example.com/?foo=fo+o&bar=ba r
http://example.com/?foo=fo+o&bar=ba%20r
http://example.com/?foo=fo+o&bar=ba%20r
http://example.com/?foo=fo+o&bar=ba%20r
http://example.com/?foo=fo+o&bar=ba%20r
http://example.com/?foo=fo+o&bar=ba r
http://example.com/?foo=fo+o&bar=ba r
http://example.com/?foo=fo+o&bar=ba%20r
http://example.com/?foo=fo+o&bar=ba%20r
http://example.com/?foo=fo+o&bar=ba%20r …
Run Code Online (Sandbox Code Playgroud)

spring resttemplate

21
推荐指数
4
解决办法
2315
查看次数

Spring Rest 控制器从查询参数中的 zonedatetime 中删除加号

我有UT,顺利通过

    @Test
    public void test() {
        String text1 = "2009-07-10T14:30:01.001Z";
        String text2 = "2009-07-10T14:30:01.001+03:00";
        DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ");

        ZonedDateTime zonedDateTime1 = ZonedDateTime.parse(text1, f);
        ZonedDateTime zonedDateTime2 = ZonedDateTime.parse(text2, f);

        System.out.println(zonedDateTime1);
        System.out.println(zonedDateTime2);
    }
Run Code Online (Sandbox Code Playgroud)

输出是

2009-07-10T14:30:01.001Z
2009-07-10T14:30:01.001+03:00
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在 spring-controller 上使用这种模式时

    @GetMapping
    public ResponseEntity get( @RequestParam("start") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ")
                                               ZonedDateTime start) {
        Dto result = service.get(start);
        return new ResponseEntity(result, getHeaders(), HttpStatus.OK);
    }
Run Code Online (Sandbox Code Playgroud)

例如,仅当我传递 Z 而不是时区时,它才有效

2009-07-10T14:30:01.001Z
Run Code Online (Sandbox Code Playgroud)

但是当尝试传递时区偏移时 - 出现错误消息

“无法将类型“java.lang.String”的值转换为所需类型“java.time.ZonedDateTime”;嵌套异常为 org.springframework.core.convert.ConversionFailedException:无法从类型 [java.lang.String] 转换输入 [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.ZonedDateTime] 获取值 '2009-07-10T14:30:01.001 03:00';嵌套异常是 java.lang.IllegalArgumentException:解析尝试失败的值 [2009-07-10T14:30:01.001 03:00]”,

我尝试像这样通过邮递员传递请求

POST …
Run Code Online (Sandbox Code Playgroud)

java controller spring-boot zoneddatetime

4
推荐指数
1
解决办法
1723
查看次数