带有 JAVA 类 DTO 的 Spring Boot 3.0.0+

问题描述 投票:0回答:0

我正在做一些测试以获得设计理念。通过 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);
    }
}

java json spring spring-boot dto
© www.soinside.com 2019 - 2024. All rights reserved.