Spring Boot:application/x-www-form-urlencoded;charset=UTF-8‘ not supported

   日期:2020-10-19     浏览:214    评论:0    
核心提示:Spring -Boot:Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported]问题的出现是这样的,我从前端界面提交数据信息,然后在controller层以对象的形式接收数据前端界面: <form action="/user/saveuser" meth

Spring -Boot:Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported]

问题的出现是这样的,我从前端界面提交数据信息,然后在controller层以对象的形式接收数据

前端界面:

    <form action="/user/saveuser" method="post">
        用户ID:<input name="id" type="text"><br>
        用户姓名:<input type="text" name="username"><br>
        用户年龄:<input type="text" name="age"><br>
        账户金额:<input type="text" name="price"><br>
        <input type="submit" value="提交">
    </form>

controller层

    @RequestMapping(value = "saveuser",method=RequestMethod.POST)
    public String saveUser(@RequestBody User user){ 
        System.out.println("user"+user);
        userMapper.save(user);
        return "redirect:/user/findAll";
    }

mapper:

    @Override
    public void save(User user) { 
         jdbcTemplate.update("insert into user values (?,?,?,?)",user.getId(),user.getUsername(),user.getAge(),user.getPrice());

    }

pojo:

@Data
public class User { 
    @NotNull(message = "id不能为空")
    private int id;
    @NotEmpty(message = "姓名不能为空")
    @Length(min = 2,message = "字符串长度不能小于二")
    private String username;
    private int age;
    @Min(value = 60,message = "价格必须大于60")
    private double price;
}

本以为这个小demo会毫无悬念的运行成功,结果报了上述错误,一脸懵逼,因为没有碰见过,作为一个新手,毫不犹豫的就直接搜百度搜谷歌了,乍一看,总结一下原来说到底是编码或者json的问题导致的,这个就简单了。可是轻视敌人你就错了,网上的解答很详细,但是我的问题对他们全部免疫,我从懵逼到更加懵逼。

第一个解答是说传json时,设置content-type,肯定跟Ajax相关,但是我又没写Ajax,只是普通的form表单,但我还是尝试了一下,我用了@RequestBody,在我前端传过来的数据会自动与实体类对象进行匹配,但是数据完全过不来,所以我改用了@RequestParam,然后直接用String类型进行接收打印到控制台,看看到底是怎么回事
更改后:

    @RequestMapping(value = "saveuser",method=RequestMethod.POST)
    public String saveUser(@RequestParam String user){ 
        System.out.println("user"+user);
// userMapper.save(user);
        return "redirect:/user/findAll";

结果打印台出现一段乱码,且打印在控制台上的并不是以{ }形式的,所以我确定了传过来的数据不是json格式。那么就是乱码了。

开始查乱码,然后就有了我在yml中写了一堆编码的东西

  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html
    encoding: UTF-8
    mode: HTML5
  http:
    encoding:
      charset: UTF-8
      enabled: true
      force: true
  messages:
    encoding: UTF-8
server:
  port: 8080
  tomcat:
    uri-encoding: UTF-8

然后就是前端界面直接以记事本的形式打开改编码,但都无济于事。
然后回去重新看了spring mvc,针对前端基于对象添加的相关属性,到了controller层是直接进行匹配的,而我传过来的也不是json格式,所以我直接就把@RequestBody给删掉,我丢,给网上答案绕晕了(不怪网上怪自己),想想这么简单的问题(做出来才简单)搞了这么久,浪费这么长时间,还浪费这么长时间记录这么简单的问题,没毛病。
下次碰到问题,第一个想着自己先解试一下,不要一味的依赖网上的解答,有时候也可能事倍功半,就像我浪费的时间!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服