如何转换spring-boot请求参数

Spe*_*pen 4 java mapping request spring-boot

目前,请求方法接收一个编码令牌作为参数(该令牌是一个String,但不是 JSON 或类似的东西)。然后该令牌被解码为数据类。

@GetMapping(value = "/api/xyz")
public ResponseEntity<XYZ> xyz(@NotBlank String token) {
    Data data = Token.parse(token);
    ...
}
Run Code Online (Sandbox Code Playgroud)

是否可以编写类似于@RequestBody将参数转换为其他内容的注释?

该请求应该看起来像这样:

@GetMapping(value = "/api/xyz")
public ResponseEntity<XYZ> xyz(@TokenParser Data data) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

token该类/注释应包含将( )转换为我的数据类所需的代码String。请求方法应该仅将转换后的数据类作为参数。

Spe*_*pen 5

我用 spring-boot 解决了这个问题Converter

import javax.inject.Inject;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

@Component
public class TokenConverter implements Converter<String, Data> {

    private final TokenParser tokenParser;

    @Inject
    public TokenConverter(TokenParser TokenParser) {
        this.tokenParser = tokenParser;
    }

    @Override
    public Data convert(String token) {
        return tokenParser.parse(token);
    }
}
Run Code Online (Sandbox Code Playgroud)

只需在项目中的任何位置添加这样的转换器即可。该映射由 spring-boot 管理。

新请求:

@GetMapping(value = "/api/method")
public ResponseEntity<Data> method(@RequestParam("token") Data data) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息:https://www.baeldung.com/spring-mvc-custom-data-binder

我希望它对其他人有帮助。