【问题标题】:Handle the request param dynamically with Jackson library使用 Jackson 库动态处理请求参数
【发布时间】:2021-11-16 08:20:08
【问题描述】:

我有一个休息控制器,它有一个 GET 请求,并且请求参数可以是我想说的任何更动态的类型。我想根据我们从用户那里获得的数据将请求参数映射到适当的子类。 BaseRequest 类是 `

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
        @JsonSubTypes.Type(value = RequestA.class, name = "RequestA"),
        @JsonSubTypes.Type(value = RequestB.class, name = "RequestB")
})
@Data
@NoArgsConstructor
public class BaseRequest {
    private String error;
}

RequestA class is

@Data
@JsonTypeName("RequestA")
@NoArgsConstructor
public class RequestA extends BaseRequest {
    private String token;
}

`

RequestB 是 `

@Data
@JsonTypeName("RequestB")
@NoArgsConstructor
public class RequestB extends BaseRequest {
    private String id;
}

`

我的控制器是`

@GetMapping(value = "/request", produces = MediaType.APPLICATION_JSON_VALUE)
    public String request(BaseRequest request)

`

请求看起来像 1)http://localhost:8080/request?token=abc&error=test 2)http://localhost:8080/request?id=abc 它似乎不起作用。我只在控制器上获取 Base 类的信息。

【问题讨论】:

  • 请求参数不是 JSON 并且不使用 Jackson。您将需要自定义数据绑定器或使用包含参数列表的请求映射。

标签: java spring spring-boot jackson


【解决方案1】:

如果你使用 GET 它不会使用 JSON,你可以写

@GetMapping(value = "/request", produces = MediaType.APPLICATION_JSON_VALUE)
 public String request(@RequestParam(required = false) String token,
 @RequestParam(required = false) String id, @RequestParam(required = false) String error) {
  //Initialize request A if token is not null else request B or add your custom control
}

如果您需要更多具有不同目的的参数,您可以创建一个自定义对象以在 POST 正文中传递,然后根据您的需要进行正确的调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2014-07-27
    • 2020-02-19
    • 2015-08-13
    相关资源
    最近更新 更多