我正在使用 Spring 5.3.9、jackson-core 和 jackson-databind-2.17.1 版本。从 UI 中,我将 json 数组发送到控制器。我在控制器中尝试了多种参数类型,但它们都不起作用。收到不好的请求。
@Controller
@RequestMapping("/secure")
public class PrsPyamentUtilizationSave {
@PostMapping(value = "/prsPyamentUtilSave.html", produces = MediaType.TEXT_HTML_VALUE)
@ResponseBody
public String prsPaymentUtilValidation(@RequestBody Map<String, Object> [] list) {
System.out.println("paymentUtils: " + paymentUtils);
return "OK";
}
}
如果我将其更改为 String 它可以工作,但输出看起来不像 json。
public String prsPaymentUtilValidation(@RequestBody String paymentUtils)
{
System.out.println("jsonArray: " + paymentUtils);
return "OK";
}
jsonArray: list%5B0%5D%5BReportId%5D=1234&list%5B0%5D%5BProviderId%5D=204437&list%5B0%5D%5BProgramTypeId%5D=1&list%5B0%5D%5BFcpUnits%5D=6&list%5B1%5D%5BReportId%5D=1234&list%5B1%5D%5BProviderId%5D=99999&list%5B1%5D%5BProgramTypeId%5D=1&list%5B1%5D%5BFcpUnits%5D=7
是的,字符串总是有效,因为它就是字符串。 您的地图将无法工作,因为您的数据不是以地图的形式构建的。 考虑为此创建一个 DTO。
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class PaymentDTO {
@JsonProperty("ReportId")
private String reportId;
@JsonProperty("ProviderId")
private long providerId;
@JsonProperty("ProgramTypeId")
private long programTypeId;
@JsonProperty("FcpUnits")
private String fcpUnits;
}
然后你只需要让你的控制器获取其中的
List
。
public String prsPaymentUtilValidation(@RequestBody List<PaymentDTO> paymenDTOs) {