spring 内容类型'text/plain;在RestController类内部的Sping Boot 中出现“charset=UTF-8”不支持的错误

vatpfxk5  于 2023-10-15  发布在  Spring
关注(0)|答案(5)|浏览(170)

我在一个spring Boot 应用程序中得到了以下@RestController:

@Data
@RestController
public class Hello {

    @Autowired
    private ResturantExpensesRepo repo;

    @RequestMapping(value = "/expenses/restaurants",method = RequestMethod.POST,consumes =MediaType.APPLICATION_JSON_VALUE ,
            headers = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public void hello(@RequestBody ResturantExpenseDto dto)
    {
        Logger logger = LoggerFactory.getLogger("a");
        logger.info("got a request");

        ResturantExpenseEntity resturantExpenseEntity = new ResturantExpenseEntity();
        resturantExpenseEntity.setDate(new Date(System.currentTimeMillis()));
        resturantExpenseEntity.setName(dto.getName());
        resturantExpenseEntity.setExpense(dto.getExpense());
        repo.save(resturantExpenseEntity);
    }
}

当我尝试从restClient/RestedClient(mozila的两个插件)发送请求时,我得到以下错误:
{“timestamp”:1512129442019,“状态”:415,“错误”:“不支持的媒体类型”,“message”:“内容类型”text/plain; charset=UTF-8' not supported”,“path”:“/expenses/restaurants”}
这个错误说明了端点不支持JSON内容,但是我确实把它放在了
consumes =MediaType.APPLICATION_JSON_VALUE
@RequestMapping注解内部
我错过了什么?

acruukt9

acruukt91#

延迟响应,但我有同样的问题张贴的答案,它可能是有用的人,所以我安装了 Postman ,然后只是改变您的内容类型为应用程序/json

ktecyv1j

ktecyv1j2#

如果请求是这样的:那就能解决问题

curl -X PUT -H 'Content-Type: application/json' -i http://localhost:8080/spring-rest/api/employees/500 --data '{
  "name": "abc",
  "email": "[email protected]",
  "salary": 10000
}'

我看到标题是正确的:headers = MediaType.APPLICATION_JSON_VALUE
但是当发出请求时,我们需要通知处理程序它是一个application/json mime类型。

vnzz0bqm

vnzz0bqm3#

这也很晚了,但在RESTClient(Mozilla addon)中,您可以添加Content-Type:应用程序/JSON,甚至在响应端将其更改为JSON格式

im9ewurl

im9ewurl4#

如果你使用的是html和apache。检查请求头和有效负载。请确保目录包含以下字段

url : your url
                type : 'post',
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data : JSON.stringify( your payload )

如果aplog调用具有以下字段,请删除它们并重试

processData : false,
         contentType : false,
rggaifut

rggaifut5#

如果您试图通过Postman测试此API,
--转到Postman的标题选项卡,
--点击隐藏的标题(您将在顶部看到此信息)
--取消选中Content-Type
--新增表头信息为;
Content-Type(key)和application/json(value)
--测试API,您将获得结果

相关问题