当前位置: 首页 > 知识库问答 >
问题:

枚举作为Spring Boot Rest中的请求参数

凤扬
2023-03-14

我是Spring启动的新手,并试图使用枚举作为Rest请求的参数。

这是我的枚举类:

public enum Month {

    JANUARY (1, "january"), FEBRUARY(2,"february"), MARCH(3,"march"),
    APRIL(4,"april"), MAY(5,"may"), JUNE(6,"june"), JULY(7,"july"),
    AUGUST(8, "august"), SEPTEMBER(9,"september"), OCTOBER(10,"october"),
    NOVEMBER(11,"november"), DECEMBER(12,"december");

    private String desc;
    private int id;

    //Constructure

    //Getters and Setters
}

在我的控制器类中,我使用了以下方法:

    @RequestMapping(value = "/testmonth", method = RequestMethod.POST)
        public Month TestForMonth(@RequestBody Month inputPayload) {
            Month response = inputPayload;
            response.setId(inputPayload.getId());
            response.setDesc(inputPayload.getDesc());
            System.out.println("As String: " + inputPayload.getDesc() + ". As int " + inputPayload.getId() + ".");
            return response;
        }

这是我的JSON:

{
    Month: "JANUARY"
}

但它不起作用。。我收到以下错误:

.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `com.example.simplerestapis.models.Month` out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.example.simplerestapis.models.Month` out of START_OBJECT token
 at [Source: (PushbackInputStream); line: 1, column: 1]]

共有1个答案

苏彦君
2023-03-14

您的主体声明为简单枚举类型,而不是对象。因此,不要使用大括号发布JSON对象,而是尝试只发布一个值,例如:

"JANUARY"
 类似资料:
  • 因此,我进入了这个新的Spring Boot项目,该项目已经在开发中,在编写API时,我在我的控制器中使用了Enum作为RequestParam。 我没有为此编写任何转换器。 后来我注意到,在这个项目中,其他开发人员已经为此编写了自定义转换器。 所以我决定在网上搜索关于这个和所有的解决方案,出现了使用与在Spring Boot中使用的转换器,找不到任何没有转换器的例子,就像我做的那样。 下面是我写

  • 问题内容: 在我的MySQL数据库中,有“ gender enum(’male’,’female’)”列 我创建了枚举“ com.mydomain.myapp.enums.Gender”,并在我的实体中定义了“性别”。 现在,我想将枚举类型保留在我的MySQL数据库中,但是当我启动应用程序时,我得到: 性别列在MyApp.Person中的列类型错误。找到:枚举,预期:整数 为什么是这样?这就像我用

  • 问题内容: 在我的MySQL数据库中,有“ gender enum(’male’,’female’)”列 我创建了枚举“ com.mydomain.myapp.enums.Gender”,并在我的实体中定义了“性别”。 现在,我想将枚举类型保留在我的MySQL数据库中,但是当我启动应用程序时,我得到: 性别列在MyApp.Person中的列类型错误。找到:枚举,预期:整数 为什么是这样?就像我用“

  • 我想使用中定义的枚举作为查询字符串中参数定义的一部分。 我在我的Swagger 2.0规范文件的< code>definitions部分定义了Swagger枚举。 我可以在其他定义中创建对它的引用: 当参数在:body中为中为

  • 在TypeScript中,我定义了一个,然后我想让一个函数接受一个参数,该参数的值是枚举的值之一。但是,TypeScript似乎不对值进行任何验证,并允许枚举之外的值。有办法做到这一点吗? 如果我使用而不是,我可以得到与我所要得到的类似的东西,但是我失去了enum的一些功能。