Java 杂谈Java学习之路Java

Springboot出现Content type 'ap

2019-08-20  本文已影响64人  椰子奶糖

猜测我接不到数据的原因:

跨域访问,需要开启跨域访问

数据格式错误导致数据有但无法有效封装

  • 其中数据格式错误分为移动端传输的错误,和后端的接收错误

对于跨域访问问题,我能想到也是靠学长提醒(事实上并不是这个问题)

第二种数据格式问题


<script type="application/javascript">
    function ajaxTest() {

        alert($("#commentId").val())
        $.ajax({
            url:"http://192.168.43.158:8082/comment/likeOrDelete2",
            datatype:"json",
                data:{commentId:+$("#commentId").val(),status:$("status").val()},
            type:"post",
            headers : {
                'Content-Type' : 'application/json;charset=utf-8'
            },
            error:function (data) {
                alert("出错了!!"+data.msg);
            },
            success:function (data) {
                $("result").html(data.msg);

            }
        });

    }



</script>


</body>

<form action="http://192.168.43.158:8082/comment/likeOrDelete2" method="post" id="Form">

    _commentId: <br><input type="text" name="commentId" id="commentId"/>
<br>
    _status:<br> <input type="text" name="status" id="status"/><br>
    <input type="submit" name="喜欢" onclick="ajaxTest()"/>



</form>
  • 事实上这在意料之中(哭),好吧,发现了自己无意间挖的一个坑
  • 而原先我在postman上测试的结果是这样的:
postman上的测试
  • 发现好像数据格式不是一致的,并不是form表单
  • 于是我换了form-data格式的试了一下


    不幸命中.png
  • (哭)这锅哭着也得背
  • 我有仔细琢磨琢磨controller中的代码
@PostMapping(value="/comment/likeOrDelete2")
    public HashMap likeOrDelete2(@RequestBody HashMap<Object,Object> map) {
        UserComment userComment = userCommentService.getUserCommentFromMap(map);
        HashMap result = userCommentService.updateUser(userComment);
        return result;
    }
  • 这段代码看起来还算比较标准(除了命名),能拦截请求(有打印log),但不能接收数据,于是我把注意力转到@RequestBody这个注解上,隐约记得@RequestParam好像也能接值(基础没打好的痛)

经过查证:

@RequestBody与@RequestParam

案件告破

  • 又又又是注解惹的祸(流下了没有技术的泪水),之前我用postman验证的时候采用的格式是JSON(application/json)也就是Json字符串,这个用@RequestBody正好可以,而表单则需要@RequestParam接收,为了验证于是我叫大佬写一个传字符串的,成功。。。。
  • 背锅侠开始苦逼的填坑之路~~~

扩展

另外关于x-www-form-urlencoded

  • 如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。
    application/json和text/json
  • 请求中传JSON时设置的Content-Type 如果是application/json或者text/json时,JAVA中request.getParameter("")怎么也接收不到数据。这是因为,Tomcat的HttpServletRequest类的实现类为org.apache.catalina.connector.Request(实际上是org.apache.coyote.Request)。
上一篇 下一篇

猜你喜欢

热点阅读