我有一个spring boot controller端点,如下。
@PutMapping("/manage/{id}")
public ResponseEntity<Boolean> manage(@PathVariable Long id, @RequestBody Type type) {
...
}
类型为枚举的类型如下。
public enum Type {
ONE,
TWO
}
问题1::在测试此控制器时,必须以"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:内容类型'text / plain; charset = UTF-8'不支持
当我将枚举添加到Dto并从客户端发送对象时,一切正常。但是由于某些业务需求,我想使用当前结构本身。即枚举为RequestBody
。
更新
我还尝试将控制器方法结构更改为
@PutMapping(value = "/manage/{id}", consumes = MediaType.TEXT_PLAIN_VALUE)
我收到以下错误消息。
不支持内容类型“文本/纯文本”
答案 0 :(得分:1)
两个问题均源于试图将JSON端点用作纯文本端点。
广告1,ONE
是无效的JSON("ONE"
是有效的)
广告2,当您刚发布一个字符串时,它以text/plain
的形式发送,端点抱怨。
可能在您的consumes="text/plain"
中添加@PutMapping
将解决此问题,但坦率地说-我不确定字符串/枚举映射是否在Spring的大杂烩中即开即用引导。