缺少所需的请求正文,但它在那里

大篷车

我有一个带有UserStateDTO请求正文的POST端点。Junit测试工作正常;但是,由于“缺少必需的请求正文”,因此无法在浏览器中运行。如您所见,那里有尸体……这使我发疯。请在下面找到错误和摘要。

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public void .....UserRestController.setState(UserStateDTO)
@PostMapping(value = "/state", consumes = MediaType.APPLICATION_JSON_VALUE)
public void setState(@RequestBody UserStateDTO userStateDTO) {
    if (userStateDTO != UserStateDTO.ACTIVE && userStateDTO != UserStateDTO.DISABLED) {
        throw new BusinessException(GeneralErrors.INVALID_REQUEST);
    }
    UserDTO userDTO = userService.getUser();
    userDTO.setState(userStateDTO);
    userService.updateUser(userDTO);
}
public enum UserStateDTO {
    ACTIVE("ACTIVE"),
    DISABLED("DISABLED");

    private final String state;

    private static final Map<String, UserStateDTO> states = new HashMap<>();

    UserStateDTO(String state) {
        this.state = state;
    }

    static {
        for (UserStateDTO u : UserStateDTO.values()) {
            states.put(u.getValue(), u);
        }
    }

    @JsonValue
    public String getValue() {
        return state;
    }

    @JsonCreator
    public static UserStateDTO fromValue(String state) {
        return states.get(StringUtils.upperCase(state));
    }

}

fetch("http://localhost:4200/user/state", {
  "headers": {
    "accept": "application/json, text/plain, */*",
    "accept-language": "en,hu;q=0.9,nb;q=0.8",
    "content-type": "application/json",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-xsrf-token": "-"
  },
  "referrer": "http://localhost:4200/",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": "{\"state\":\"ACTIVE\"}",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});
arch2be

您必须getState()在枚举中添加方法。正确的代码如下:

public enum UserStateDTO {
  ACTIVE("ACTIVE"),
  DISABLED("DISABLED");

  private final String state;

  private static final Map<String, UserStateDTO> states = new HashMap<>();

  UserStateDTO (String state) {
    this.state = state;
  }

  static {
    for (UserStateDTO u : UserStateDTO.values()) {
        states.put(u.getValue(), u);
    }
  }

  public String getState() {
    return state;
  }

  @JsonValue
  public String getValue() {
    return state;
  }

  @JsonCreator
  public static UserStateDTO fromValue(String state) {
    return states.get(StringUtils.upperCase(state));
  }
}

或者,您可以仅在方法内部添加fromValue()注解@JsonProperty("state"),该注解绑定您的请求正文值而不使用getter。正确的方法如下:

  @JsonCreator
  public static UserStateDTO fromValue(@JsonProperty("state") String state) {
    return states.get(StringUtils.upperCase(state));
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Firebase 说我在 Manifest 中缺少一行,但它在那里

来自分类Dev

“类”不包含“方法”的定义,但它在那里

来自分类Dev

i2cdetect不会显示设备,但它在那里

来自分类Dev

为什么我会收到“ -bash:'alias:命令未找到”,但它在那里..?

来自分类Dev

在配置文件中找不到连接字符串。但它在那里

来自分类Dev

尝试Link_to_Asset(Laravel)找不到文件(但它在那里)

来自分类Dev

无法通过 id 或标签找到片段....但它在那里

来自分类Dev

为什么Rails 4会说缺少帮助文件,尽管它在那里?

来自分类Dev

HighRise API 创建一个失败的人,当它在那里时缺少名字

来自分类Dev

Devise无法检测到:omniauthable,但是它在那里

来自分类Dev

img不可见..但是它在那里

来自分类Dev

form_for helper 给了我一个错误,尽管它在那里缺少一个参数

来自分类Dev

Vim说'missing:endif',但是我确定它在那里

来自分类Dev

丢失的 ”;” 在标识符“名称”之前,即使它在那里

来自分类Dev

Django找不到我的基本模板,但是它在那里

来自分类Dev

为什么libnettle 2.7.1的.configure找不到-lgmp,即使它在那里?

来自分类Dev

“没有这样的文件或目录”,但是它在那里。

来自分类Dev

apt-get表示未找到Version,但是它在那里

来自分类Dev

失踪 ”;” 在标识符“名称”之前,即使它在那里

来自分类Dev

Vim说'missing:endif',但是我确定它在那里

来自分类Dev

猫鼬 findOne 不提供文档,即使它在那里

来自分类Dev

apt-get表示未找到Version,但是它在那里

来自分类Dev

Android NDK链接V8静态库:找不到符号,但它们在那里

来自分类Dev

我的/ boot分区坏了。我该如何写在那里所需的一切?

来自分类Dev

缺少所需的请求正文:前端请求问题

来自分类Dev

Aapt失踪,但在那里

来自分类Dev

我收到FileNotFoundException但文件在那里

来自分类Dev

jQuery:缩小以居中并留在那里

来自分类Dev

杀死#### 但进程还在那里?

Related 相关文章

  1. 1

    Firebase 说我在 Manifest 中缺少一行,但它在那里

  2. 2

    “类”不包含“方法”的定义,但它在那里

  3. 3

    i2cdetect不会显示设备,但它在那里

  4. 4

    为什么我会收到“ -bash:'alias:命令未找到”,但它在那里..?

  5. 5

    在配置文件中找不到连接字符串。但它在那里

  6. 6

    尝试Link_to_Asset(Laravel)找不到文件(但它在那里)

  7. 7

    无法通过 id 或标签找到片段....但它在那里

  8. 8

    为什么Rails 4会说缺少帮助文件,尽管它在那里?

  9. 9

    HighRise API 创建一个失败的人,当它在那里时缺少名字

  10. 10

    Devise无法检测到:omniauthable,但是它在那里

  11. 11

    img不可见..但是它在那里

  12. 12

    form_for helper 给了我一个错误,尽管它在那里缺少一个参数

  13. 13

    Vim说'missing:endif',但是我确定它在那里

  14. 14

    丢失的 ”;” 在标识符“名称”之前,即使它在那里

  15. 15

    Django找不到我的基本模板,但是它在那里

  16. 16

    为什么libnettle 2.7.1的.configure找不到-lgmp,即使它在那里?

  17. 17

    “没有这样的文件或目录”,但是它在那里。

  18. 18

    apt-get表示未找到Version,但是它在那里

  19. 19

    失踪 ”;” 在标识符“名称”之前,即使它在那里

  20. 20

    Vim说'missing:endif',但是我确定它在那里

  21. 21

    猫鼬 findOne 不提供文档,即使它在那里

  22. 22

    apt-get表示未找到Version,但是它在那里

  23. 23

    Android NDK链接V8静态库:找不到符号,但它们在那里

  24. 24

    我的/ boot分区坏了。我该如何写在那里所需的一切?

  25. 25

    缺少所需的请求正文:前端请求问题

  26. 26

    Aapt失踪,但在那里

  27. 27

    我收到FileNotFoundException但文件在那里

  28. 28

    jQuery:缩小以居中并留在那里

  29. 29

    杀死#### 但进程还在那里?

热门标签

归档