内容类型' text / plain; charset = UTF-8'在RestController类中的Spring启动时不支持错误

时间:2017-12-01 12:07:50

标签: spring spring-boot utf-8 spring-restcontroller spring-web

我在Spring启动应用程序中获得了以下@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插件)​​我收到以下错误:

  

{     "时间戳":1512129442019,     "状态":415,     "错误":"不支持的媒体类型",     " message":"内容类型' text / plain; charset = UTF-8'不支持",     "路径":" /费用/餐馆"   }

这个错误表明终点不支持Json内容,但我做到了 把

  

consumes = MediaType.APPLICATION_JSON_VALUE

在@RequestMapping注释中

我错过了什么?

4 个答案:

答案 0 :(得分:1)

如果这样发出请求:那么它将解决问题。

curl -X PUT -H 'Content-Type: application/json' -i http://localhost:8080/spring-rest/api/employees/500 --data '{
  "name": "abc",
  "email": "abc.a@gmail.com",
  "salary": 10000
}'

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

答案 1 :(得分:0)

最新回应,但发布答案时我遇到了同样的问题,这可能对某人有用,因此我安装了Postman,然后将您的Content-Type更改为application / json

答案 2 :(得分:0)

如果您将html与ajax一起使用,请检查请求标头和有效负载。确保ajax具有以下字段

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

如果ajax调用具有以下字段,请将其删除,然后重试

         processData : false,
         contentType : false,

答案 3 :(得分:-1)

这也很晚,但是在RESTClient(mozilla插件)​​中,您可以从“标题”下拉菜单中添加Content-Type:application / json。