java与xhr(或fetch)和springmvc的网络通信

dxxyhpgq  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(267)

现在我正在学习关于春靴的知识。
所以我创建了一个视图,并在这个页面中通过ajax发送了一个请求。
下面的代码是关于jsp中的javascript的。

fetch("/login/login.ajax",{
    data:{
      "test":"a"
    }
  }).then((res)=>{
    return res.json();
  }).then((res)=>{
    console.log(res);
  })

下面的代码在一个spring引导控制器上

@RequestMapping("/login/login.ajax")
@ResponseBody
public HashMap<String, Object> login(@RequestBody JSONObject request){
    HashMap<String, Object> resultMap = new HashMap<String, Object>();

    if(request != null){
        Object req = request.get("test");

        System.out.println(req.toString());
        if(req.toString().equals("a")){
            resultMap.put("data","cool");
        }
        else{
            resultMap.put("data","hot");
        }
        log.info("ajax-login");
    }
    else{
        resultMap.put("errorCode", "0001");
    }

    return resultMap;
}

现在我在chrome的控制台上发现了这个错误。
时间戳:“2020-12-09t09:22:27.095+0000”,状态:400,错误:“错误请求”,消息:“缺少必需的请求正文:public java.util….login.loginctr.login(org.json.simple.jsonobject)”,跟踪:“org.springframework.http.converter.httpmessagenotr…java.base/java.lang.thread.run(thread)。java:832) ↵", …} 错误:“错误请求”消息:“缺少必需的请求正文:public java.util.hashmap<java.lang.string,java.lang.object>toast.test.login.loginctr.login(org.json.simple.jsonobject)“路径:”/login/login.ajax“状态:400时间戳:”2020-12-09t09:22:27.095+0000“跟踪:”org.springframework.http.converter.httpmessagenetradableexception:缺少必需的请求正文:public java.util.hashmap<java.lang.string,java.lang.object>toast.test.login.loginctr.login(org.json.simple.jsonobject)↵ 位于org.springframework.web.servlet.mvc.method.annotation.requestresponsebodymethodprocessor.readwithmessageconverters(requestresponsebodymethodprocessor)。java:161) ↵ 位于org.springframework.web.servlet.mvc.method.annotation.requestresponsebodymethodprocessor.resolveargument(requestresponsebodymethodprocessor)。java:131) ↵ 位于org.springframework.web.method.support.handlermethodargumentresolvercomposite.resolveargument(handlermethodargumentresolvercomposite)。java:121) ...
好吧,我认为它会出错,因为它不合适。
但是这个错误在客户端获取有关服务器端的详细信息源。
我想隐藏所有这些错误,尤其是关于消息和跟踪的错误。
我该怎么做?请给我一些建议。

ac1kyiln

ac1kyiln1#

您尚未在获取请求中发送正文。或许你可以这样做:

var data={"test":"a"};
    fetch{url,{
    body: JSON.stringfy(data)
              }
         }

请阅读fetch文档以供参考:https://developer.mozilla.org/en-us/docs/web/api/fetch_api/using_fetch

xcitsw88

xcitsw882#

谢天谢地,我解决了这个错误。
我看了这篇文章。如何抑制spring引导错误消息
下面的代码是我所做的。

@ExceptionHandler
@ResponseBody
public HashMap<String, Object> handlingError(Exception err){
    HashMap<String, Object> result = new HashMap<>();
    result.put("timestamp", Instant.now().toEpochMilli());
    result.put("status",    HttpStatus.METHOD_NOT_ALLOWED.value());
    result.put("error",     HttpStatus.METHOD_NOT_ALLOWED.getReasonPhrase());
    result.put("exception", err.getClass().getName());
    result.put("message", String.format("Request method '%s' not supported", err.getCause()));
    log.info("errorHandler");
    return result;
}

相关问题