我正在做一些测试以获得设计理念。通过 JSON 请求,我想在 GET
中创建一个 DTO 类package org.crea.w4ag_mock.mocker;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.crea.w4ag_mock.enums.TimeFramesEnum;
@Getter
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class ParamsDTO {
private String id;
private String name;
private TimeFramesEnum timeFramesEnum;
private double randNum;
}
在哪里(我也在想办法让 Enun 小写):
package org.crea.w4ag_mock.enums;
import com.fasterxml.jackson.annotation.JsonProperty;
public enum TimeFramesEnum {
/*
baseline = BASELINE
period2_2040 = PERIOD2_2040
period3_2070 = PERIOD2_2070
*/
BASELINE,
PERIOD2_2040,
PERIOD2_2070
}
我有我的类应用程序(@SpringBootApplication)+控制器(@RestController):
package org.crea.w4ag_mock;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.crea.w4ag_mock.mocker.*;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
@SpringBootApplication
@RestController
public class Water4AgriFoodMockerApplication {
public static void main(String[] args) {
SpringApplication.run(Water4AgriFoodMockerApplication.class, args);
}
@GetMapping("mock")
@ResponseBody
public ResponseEntity<ParamsDTO> getMock(@RequestParam(value = "pars") String parametersDTO) throws IOException {
final ParamsDTO paramsDTO =
new ObjectMapper()
.readValue(parametersDTO, ParamsDTO.class);
paramsDTO.setRandNum(12345);
return ResponseEntity.ok(paramsDTO);
}
}
我将我的 JSON 转换为 URL 编码的 JSON (https://onlinejsontools.com/url-encode-json)。 注意,这是因为 TOMCAT 使用纯 JSON 向我报告错误:
{
"id":"1",
"name":"test",
"timeFramesEnum":"BASELINE"
}
我使用 POSTMAN 来测试整个事情:
到目前为止一切顺利,但是如果我创建一个合适的 Controller 类,我会在 Postman 中收到以下错误消息:
package org.crea.w4ag_mock.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.crea.w4ag_mock.mocker.*;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
@RestController
@RequestMapping(path="api/v1/")
public class Water4AgriFoodMockController {
@GetMapping("mock1")
@ResponseBody
public ResponseEntity<ParamsDTO> getMock1(@RequestParam(value = "pars") String parametersDTO) throws IOException {
final ParamsDTO paramsDTO =
new ObjectMapper()
.readValue(parametersDTO, ParamsDTO.class);
paramsDTO.setRandNum(12345);
return ResponseEntity.ok(paramsDTO);
}
}