java - HttpMediaTypeNotAcceptableException/HttpMediaTypeNotAcceptableException : Could not find acceptable representation

标签 java spring api spring-mvc controller

我有一个客户端正在尝试连接的 API。但是它会抛出错误:

2015 09 22 04:21:44.297 [org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor] Could not parse Accept header: Invalid token character ',' in token "json,application/x-www-form-urlencoded"
2015 09 22 04:21:44.298 [org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver] Resolving exception from handler [public org.springframework.http.ResponseEntity<java.lang.String> com.areviews.api.restcontroller.APIOrderController.getNewOrderApi(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
2015 09 22 04:21:44.298 [org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver] Invoking @ExceptionHandler method: public org.springframework.web.servlet.ModelAndView com.areviews.web.controller.AbstractController.handleException(java.lang.Exception,javax.servlet.http.HttpServletRequest)
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:115)
    at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:129)
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:74)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)

Controller :

@RequestMapping(value = {"order/add"}, method = RequestMethod.POST, produces="application/json; charset=utf-8")
@ResponseBody
public ResponseEntity<String> getNewOrderApi(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    .....

    return JsonUtils.createJson(jsonObj);
}

他们使用 jQuery 来请求我的 API:

    $.ajax({
            url: "https://api.mywebsite.com/apiv1/order/add",
            type: 'POST',
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Content-Type","application/json;charset=utf-8");
            },
            data : JSON.stringify(data),
            dataType: 'json',
            success: function(data) {
                if (data.success == true){
                    console.log(data);
                }else{
                    console.log("error: " + data.error_description);
                }
            }
        });

问题出在他们的请求 header 中,“Content-Type”是:

Accept:application/json, text/javascript, */*
Accept-Encoding:gzip, deflate
Accept-Language:zh,zh-TW;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:561
Content-Type:application/x-www-form-urlencoded, application/json;charset=UTF-8

我们不知道“application/x-www-form-urlencoded,”来自哪里(“,”会产生问题,因为它应该是“;”)。我这边能做什么?他们可以做什么?

最佳答案

我也遇到了同样的问题。

我尝试使用 Volley 从 android 访问 API。

有 2 种不同的内容类型。一个是请求头Content-Type,另一个是正文Content-Type。当您从 volley 发起 POSTPUT 请求时,volley 会获取请求 header 并检查正文内容类型。如果没有提及 body Content-Type,volley 会自行添加。 Volley 结合了两种内容类型,我们的服务器只能接受一种内容类型。但是,当 volley 结合了 header 和 body 的 Content-Type 时,它​​变成了“application/json, application/x-www-form-urlencoded; charset=utf-8”。

这里,“application/x-www-form-urlencoded”是请求正文的Content-Type。因此,要解决这个问题,您可以重写 getBodyContentType() 方法并返回 null。

@Override
public String getBodyContentType() {
//return super.getBodyContentType();
    return null;
}

不要使用返回“”。使用 return "" 也会抛出异常。

[org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor] Could not parse Accept header: Invalid token character ',' in token "json, "

希望这会有所帮助。

关于java - HttpMediaTypeNotAcceptableException/HttpMediaTypeNotAcceptableException : Could not find acceptable representation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32709072/

相关文章:

java - 如何在 spring 上下文中将 null 设置为 Integer

iPhone,JSON 响应中的特殊字符

python - Instagram API 在 follow_user(user_id) 上失败

javac : Compiling a . 使用了其他类的java文件

java - 获取三重副本时的值错误

java - 扩展接口(interface)Repository并实现扩展接口(interface)时两个合格的bean出错

java - 如何设置 Spring Boot 以运行 HTTPS/HTTP 端口

java - 无法将 Spring Boot Java 应用程序提交到 Spark 集群

java - 对具有不同对象的数组列表进行排序

javascript - 使用 Javascript 更快地调用 API