【发布时间】: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