[英]Pass a list of enums in postman request body
This is the controller that I am trying to pass the enum values to:这是我试图将枚举值传递给的 controller:
@AllowedRequestParams({"columns", "ids"})
@GetMapping("/v1/analysis/files")
public ResponseEntity<byte[]> downloadAnalysis(@Valid AnalysisColumnsSelector columnsSelector,
@Valid FileUploadSearchCriteria criteria,
@Valid AnalysisSortable sortable) {
return csv()
.asAttachment("data_analysis.csv")
.withBody(AnalysisDownloader.downloadAnalysis(columnsSelector, criteria, sortable));
}
This is the object having a list of enums that I am trying to pass:这是 object,其中包含我要传递的枚举列表:
import static java.util.Arrays.asList;
import static org.apache.commons.collections4.CollectionUtils.isEmpty;
import java.util.List;
import lombok.EqualsAndHashCode;
import lombok.Setter;
@EqualsAndHashCode
@Setter
class AnalysisColumnsSelector {
private List<AnalysisColumnEnum> columns;
public List<AnalysisColumnEnum> getColumns() {
return isEmpty(columns) ? asList(AnalysisColumnEnum.values()) : columns;
}
public String[] getHeaders() {
return getColumns().stream()
.map(AnalysisColumnEnum::getHeader)
.toArray(String[]::new);
}
}
and this is the enum:这是枚举:
import static java.util.Arrays.stream;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
enum AnalysisColumnEnum {
ANALYSIS_COLUMN("analysisId", "[![ANALYSIS][1]][1]"),
TITLE("title", "TITLE"),
DISCUSSED("discussed", "Discussed");
private final String code;
private final String header;
public static AnalysisColumnEnum decode(String code) {
return stream(values())
.filter(analysisColumn -> analysisColumn.code.equals(code))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("Unknown column code."));
}
I am passing my request body as in the below image, but the values are not being sent to the controller. What is my mistake?我正在传递我的请求正文,如下图所示,但值没有发送到 controller。我的错误是什么?
your request method is GET, but you send request body, they are not match.您的请求方法是 GET,但是您发送请求正文,它们不匹配。 I suggest you change your request method turn to POST, and use @RequestBody.
我建议您将请求方法更改为 POST,并使用@RequestBody。 By the way, You need to encapsulate three objects into a new object.
顺便说一句,你需要将三个对象封装成一个新的object。
@AllowedRequestParams({"columns", "ids"})
@PostMapping("/v1/analysis/files")
public ResponseEntity<byte[]> downloadAnalysis(@RequestBody XX xx) {
return csv()
.asAttachment("data_analysis.csv")
.withBody(AnalysisDownloader.downloadAnalysis(xx.getColumnsSelector(), xx.getCriteria(), xx.getSortable()));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.