gpt4 book ai didi

java - 以 Enum 作为 RequestBody 问题的 Spring boot PutMapping

转载 作者:行者123 更新时间:2023-12-04 15:53:15 36 4
gpt4 key购买 nike

我有一个 spring boot Controller 端点,如下所示。

@PutMapping("/manage/{id}")
public ResponseEntity<Boolean> manage(@PathVariable Long id, @RequestBody Type type) {
...
}

其中 Type 是一个枚举,如下所示。

public enum Type {
ONE,
TWO
}

问题 1:当我测试这个 Controller 时,我必须将内容作为 "ONE" 而不是 ONE 发送才能成功调用.即它适用于以下代码。

mvc.perform(put("/api/manage/1")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content("\"" + Type.ONE + '\"'))
.andExpect(status().isOk());

它不适用于

mvc.perform(put("/api/manage/1")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(Type.ONE.name()))
.andExpect(status().isOk());

问题 2:我无法从 Angular 服务调用此方法。

this.http.put<string>('/api/manage/' + id, type)

给我

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'text/plain;charset=UTF-8' not supported

当我将枚举添加到 Dto 并从客户端发送对象时,一切正常。但是由于一些业务需求,我想使用当前结构本身。即枚举作为 RequestBody

更新

我还尝试将 Controller 方法结构更改为

@PutMapping(value = "/manage/{id}", consumes = MediaType.TEXT_PLAIN_VALUE)

我收到以下错误。

Content type 'text/plain' not supported

最佳答案

这两个问题都源于尝试将 JSON 端点用作纯文本端点。

广告 1,ONE 是无效的 JSON(“ONE” 是有效的)

广告 2,当您只发布一个字符串时,它会作为 text/plain 发送,并且端点会提示。

可能将 consumes="text/plain" 添加到您的 @PutMapping 将解决问题,但坦率地说 - 我不确定字符串/枚举映射是否有效 - Spring Boot 大杂烩中的开箱即用。

关于java - 以 Enum 作为 RequestBody 问题的 Spring boot PutMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53011390/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com