简体   繁体   中英

Pass a list of enums in postman request body

This is the controller that I am trying to pass the enum values to:

 @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:


  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? 在此处输入图像描述

your request method is GET, but you send request body, they are not match. I suggest you change your request method turn to POST, and use @RequestBody. By the way, You need to encapsulate three objects into a new 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()));
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM