GVKun编程网logo

Spring 4.0.x JSON / Ajax HTTP / 1.1 406不可接受(springboot接收不到json)

27

在本文中,我们将给您介绍关于Spring4.0.xJSON/AjaxHTTP/1.1406不可接受的详细内容,并且为您解答springboot接收不到json的相关问题,此外,我们还将为您提供关于40

在本文中,我们将给您介绍关于Spring 4.0.x JSON / Ajax HTTP / 1.1 406不可接受的详细内容,并且为您解答springboot接收不到json的相关问题,此外,我们还将为您提供关于404-请求的Http不可用JavaEE Spring MVC、406 Spring MVC Json,根据请求“接受”标头不可接受、406不可接受的错误GET参数问题?、ajax - xmlhttprequest send json在php端接受数据的问题的知识。

本文目录一览:

Spring 4.0.x JSON / Ajax HTTP / 1.1 406不可接受(springboot接收不到json)

Spring 4.0.x JSON / Ajax HTTP / 1.1 406不可接受(springboot接收不到json)

我正在通过Java Config使用Spring 4.0.5.RELEASE和Spring MVC

我的pom.xml中包含以下内容:

<dependency>    <groupId>org.codehaus.jackson</groupId>    <artifactId>jackson-mapper-asl</artifactId>    <version>${jackson.version}</version></dependency>Where <jackson.version>1.9.13</jackson.version>

我正在使用有关JSON的Spring默认配置。在某些情况下,@Controller
我有以下几点:

@RequestMapping(value="/getjsonperson",                 method=RequestMethod.GET,                 produces=MediaType.APPLICATION_JSON_VALUE)public @ResponseBody Person getJSONPerson(){    logger.info("getJSONPerson - getjsonperson");    return PersonFactory.createPerson();}@RequestMapping(value="/getperson.json", method=RequestMethod.GET)public @ResponseBody Person getPersonJSON(){    logger.info("getPerson - getpersonJSON");    return PersonFactory.createPerson();}

并且工作正常。我可以在浏览器中看到返回的JSON值。到这里为止
一切正常。

现在我想集成Spring MVC +(JSON AJAX)

我有本教程如何参考Spring MVC:Ajax和JQuery

好的,关于AJAX的JSON,我有以下内容(通过选择框或组合框加载第二个集合或集合)

注意:URL是静态的,即使我仅使用/spring- utility/facturaajax/findallproductobycategoria.htm该问题仍然存在

$("#categoria").change(function(event){    var json = {"id" : $(this).find("option:selected").val(), "nombre" : $(this).find("option:selected").text() };    $.ajax({        url: "http://localhost:8080/spring-utility/facturaajax/findallproductobycategoria.htm" ,        data: JSON.stringify(json),        type: "POST",        beforeSend: function(xhr) {            xhr.setRequestHeader("Accept", "application/json");            xhr.setRequestHeader("Content-Type", "application/json");        },        success: function(products) {            alert("all fine!!!!");        }    });    //event.preventDefault();});

关于控制器我有以下内容来处理ajax进程

@RequestMapping(value="/findallproductobycategoria.htm",                 method=RequestMethod.POST,                consumes = MediaType.APPLICATION_JSON_VALUE,                produces = MediaType.APPLICATION_JSON_VALUE)public @ResponseBody Set<Producto> findAllProductoByCategoria(@RequestBody Categoria categoria){    logger.info("findAllProductoByCategoria: {}", categoria.toString());    return this.fakeMultipleRepository.findAllProductoByCategoria(categoria.getId());}

即使我使用headers=”Accept=application/json”还是headers=”Content- Type=application/json”问题仍然存在。

POJO是可序列化的

public class Categoria implements Serializable {    private static final long serialVersionUID = 5655804710111228325L;public class Producto implements Serializable {    private static final long serialVersionUID = -6362590479124787529L;

The problem :问题:当我更改select html元素的值时,我始终会收到HTTP / 1.1 406不可接受的消息(请参见下面的两个图像)

顺便说一句:永远不会调用服务器端。

我已经阅读过SO上的其他文章。实际上,它们都提到了Jackson,并且基于Spring3.2.x。

即使我添加以下内容,问题仍然存在

        <dependency>            <groupId>org.codehaus.jackson</groupId>            <artifactId>jackson-core-asl</artifactId>            <version>${jackson.version}</version>        </dependency>        <dependency>            <groupId>org.codehaus.jackson</groupId>            <artifactId>jackson-jaxrs</artifactId>            <version>${jackson.version}</version>        </dependency>

Thank You.

答案1

小编典典

对于观众。

错误在同一URL中。它包含了.htm

因此,对于所有开发人员,请务必将其删除

From

@RequestMapping(value="/findallproductobycategoria.htm", method=RequestMethod.POST,                consumes = MediaType.APPLICATION_JSON_VALUE,                produces = MediaType.APPLICATION_JSON_VALUE)public @ResponseBody Set<Producto> findAllProductoByCategoria(@RequestBody Categoria categoria){    logger.info("findAllProductoByCategoria: {}", categoria.toString());    return this.fakeMultipleRepository.findAllProductoByCategoria(categoria.getId());}

To

@RequestMapping(value="/findallproductobycategoria", method=RequestMethod.POST,                consumes = MediaType.APPLICATION_JSON_VALUE,                produces = MediaType.APPLICATION_JSON_VALUE)public @ResponseBody Set<Producto> findAllProductoByCategoria(@RequestBody Categoria categoria){    logger.info("findAllProductoByCategoria: {}", categoria.toString());    return this.fakeMultipleRepository.findAllProductoByCategoria(categoria.getId());}

From:

$.ajax({    url: "/spring-utility/facturaajax/findallproductobycategoria.htm" ,    data: JSON.stringify(json),    dataType: ''json'',    type: "POST",

To:

$.ajax({    url: "/spring-utility/facturaajax/findallproductobycategoria" ,    data: JSON.stringify(json),    dataType: ''json'',    type: "POST",

Because I have

@Overridepublic void configureContentNegotiation(ContentNegotiationConfigurer configurer) {    Map<String,MediaType> mediaTypes = new LinkedHashMap<>();    mediaTypes.put("json", MediaType.APPLICATION_JSON);    mediaTypes.put("xml", MediaType.APPLICATION_XML);    configurer.mediaTypes(mediaTypes);    configurer.defaultContentType(MediaType.TEXT_HTML);}

Spring提供了更多关于URL .extension的偏好,而不是标题内容

404-请求的Http不可用JavaEE Spring MVC

404-请求的Http不可用JavaEE Spring MVC

在您的应用程序中,您同时使用了(基于Java和基于xml)两种配置类型。在此答案中,使用了基于xml的配置。

尝试以下步骤。

按如下所示修改spring-servlet.xml文件,

<context:component-scan base-package="controllers,EjemploCRUD.SpringMVC.controller"></context:component-scan>

<mvc:resources mapping="/resources/**" location="/resources/" />

按如下所示在web.xml文件中配置spring-servlet.xml文件的位置,

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-servlet.xml</param-value>
</context-param>

在您的应用程序中,spring-servlet.xml和web.xml文件位于WEB-INF / views目录下。但是这些文件与view不相关。因此,请将这两个文件移到WEB-INF文件夹中练习)。

根据web.xml文件,配置的视图(jsp文件)路径为WEB-INF / views目录。但是在您的文件夹结构中,index.jsp文件位于WEB-INF文件夹下。因此,得到此错误。请将index.jsp文件移至WEB-INF / views文件夹。

406 Spring MVC Json,根据请求“接受”标头不可接受

406 Spring MVC Json,根据请求“接受”标头不可接受

在我的pom.xml中有以下详细信息

    <dependency>        <groupId>org.codehaus.jackson</groupId>        <artifactId>jackson-core-asl</artifactId>        <version>1.9.13</version>    </dependency>    <dependency>        <groupId>org.codehaus.jackson</groupId>        <artifactId>jackson-mapper-asl</artifactId>        <version>1.9.13</version>    </dependency>    <dependency>        <groupId>org.apache.httpcomponents</groupId>        <artifactId>httpclient</artifactId>        <version>4.1.1</version>    </dependency>    <dependency>        <groupId>org.apache.tiles</groupId>        <artifactId>tiles-extras</artifactId>        <version>3.0.5</version>    </dependency>    <dependency>        <groupId>org.apache.tiles</groupId>        <artifactId>tiles-core</artifactId>        <version>3.0.5</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-webmvc</artifactId>        <version>${spring-framework.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-web</artifactId>        <version>4.1.1.RELEASE</version>    </dependency>    <dependency>        <groupId>com.googlecode.json-simple</groupId>        <artifactId>json-simple</artifactId>        <version>1.1</version>    </dependency>application-config.xml:<context:component-scan base-package="com.test" /><mvc:annotation-driven /><!-- <mvc:default-servlet-handler /> --><mvc:resources mapping="/resources/**" location="/resources/" />

JSP页面:

 <form:form method="POST" action="/QuickBooks-UX/syncAccounts">        <input type="submit" value="Sync Account"/> </form:form>

控制器:

@Controller@RequestMapping("/")public class QuickBooksController {    @RequestMapping(value = "/quickBooks", method = RequestMethod.GET)    public String qucikBooks(ModelMap model) {        logger.info("Welcome to QuickBooks controller");        model.addAttribute("message", "Hello Spring MVC Framework!");        return "quickBooks";    }    @RequestMapping(value ="/syncAccounts", method = RequestMethod.POST)    public @ResponseBody List<SyncData> syncAccounts(@ModelAttribute("syncData")SyncData syncData, ModelMap model, BindingResult result) {          List<SyncData> syncDataList = new ArrayList<SyncData>();          try {                DefaultHttpClient httpClient = new DefaultHttpClient();                HttpGet getRequest = new HttpGet(                    "http://localhost:8292/qbsyncdata/getAccounts");                getRequest.addHeader("accept", "application/json");                HttpResponse response = httpClient.execute(getRequest);                if (response.getStatusLine().getStatusCode() != 200) {                    throw new RuntimeException("Failed : HTTP error code : "                       + response.getStatusLine().getStatusCode());                }                BufferedReader br = new BufferedReader(                                 new InputStreamReader((response.getEntity().getContent())));                                   while ((output = br.readLine()) != null) {                    JSONParser jsonParser = new JSONParser();                    JSONArray jsonArray = (JSONArray)jsonParser.parse(output);                    for (Object object : jsonArray) {                        JSONObject jsonObject = (JSONObject)object;                        syncData = new SyncData();                        syncData.setAccountName(jsonObject.get("accountName")==null?"":jsonObject.get("accountName").toString());                        syncData.setAccountType(jsonObject.get("accountType")==null?"":jsonObject.get("accountType").toString());                        syncData.setAccountSubType(jsonObject.get("accountSubType")==null?"":jsonObject.get("accountSubType").toString());                        syncData.setActive(jsonObject.get("active")==null?"":jsonObject.get("active").toString());                        syncDataList.add(syncData);                    }                                       model.addAttribute("syncData", output);                }                httpClient.getConnectionManager().shutdown();              } catch (Exception e) {                e.printStackTrace();              }             }         return syncDataList;    }}

我正在以以下方式调用我的网址:

http://lt-50k7sy1:8080/QuickBooks-UX/quickBooks

单击按钮后,它返回url,因为 http://lt-50k7sy1:8080/QuickBooks-UX/syncAccounts它返回406,描述为:

该请求标识的资源只能根据请求“接受”标头生成特性不可接受的响应

答案1

小编典典

将以下jar添加到Spring 4.1。*所需的pom.xml文件中。

<dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-core</artifactId>    <version>2.4.1</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.4.1.1</version></dependency>

406不可接受的错误GET参数问题?

406不可接受的错误GET参数问题?

任何人都可以告诉我为什么下面的URL返回一个406错误:

http://img.zgserver.com/apache/remote-upload.PHPurl=httpben-major.co.ukhostingbm-equipmentaxe-2.jpg&item_id=2

删除?url=参数似乎使一切正常:

http://kolek.to/functions/remote-upload.PHP?item_id=2

为了便于参考, remote-upload.PHP的内容如下:

<?PHP require_once(''../models/api.PHP''); $request_url = urldecode($_REQUEST[''url'']); $item_id = $_REQUEST[''item_id'']; echo $item_id; ?>

在弹性beanstalk上configurationapache

使用.htaccess重写GET查询string

Amazon Elastic beanstalk:使用Nginx / apache将子域转发到子文件夹

Apache将追踪斜杠附加到我的重写规则

如何使用htacces从wwwredirect到https www?

使用HTTP_HOST来标识以前的主机名称

使用参数redirect到主页url

Htaccess维护模式允许某些目录

apache在htaccess中接受的variables

.htaccess仅针对特定目录重写条件结尾斜杠

我认为这是由于你的服务器的安全过滤器(我看到在Apache的响应头)。

在你的情况是默认打开的Apache mod_security 。 尽管可以通过在服务器上运行以下命令来诊断问题(关闭过滤器可以解决问题):

SecFilterEngine off

但是,这样做只是为了检查问题是否是安全过滤器,我劝阻离开过滤器关闭(注入和垃圾邮件攻击的危险)。

如果您发现问题的原因,请尝试将您的请求列入白名单: 这里您可以找到该指南, 这里是主要网站。

总结

以上是小编为你收集整理的406不可接受的错误GET参数问题?全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

ajax - xmlhttprequest send json在php端接受数据的问题

ajax - xmlhttprequest send json在php端接受数据的问题

    var uinfo   = {};
    var uname   = document.getElementById(''uname''); 
    var upwd    = document.getElementById(''upwd'');  
    uinfo[''uname'']  = uname.value;
    uinfo[''upwd'']   = upwd.value; 
    var usent = JSON.stringify(uinfo);
    var xhr = null;
    if(window.XMLHttpRequest){
        xhr = new XMLHttpRequest();
    }else{
        xhr = ActiveXObject(''Microsoft.XMLHttp'');
    }
    xhr.open("POST", "/controler/login.php",true);
    //etc
     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send(usent);
登录后复制
登录后复制

然后php端怎么接受js发送的数据呢?
$_POST['''']
拿不到数据,这部分的格式具体是要指定呢,求大神指导下~~

多谢~!

回复内容:

    var uinfo   = {};
    var uname   = document.getElementById(''uname''); 
    var upwd    = document.getElementById(''upwd'');  
    uinfo[''uname'']  = uname.value;
    uinfo[''upwd'']   = upwd.value; 
    var usent = JSON.stringify(uinfo);
    var xhr = null;
    if(window.XMLHttpRequest){
        xhr = new XMLHttpRequest();
    }else{
        xhr = ActiveXObject(''Microsoft.XMLHttp'');
    }
    xhr.open("POST", "/controler/login.php",true);
    //etc
     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send(usent);
登录后复制
登录后复制

然后php端怎么接受js发送的数据呢?
$_POST['''']
拿不到数据,这部分的格式具体是要指定呢,求大神指导下~~

多谢~!

答案太弱了...

xhr.send(''json=''+usent);
登录后复制

你可以用file_get_contents(‘php://input’);尝试打印看看是什么,可以去看看这一篇文章

今天关于Spring 4.0.x JSON / Ajax HTTP / 1.1 406不可接受springboot接收不到json的分享就到这里,希望大家有所收获,若想了解更多关于404-请求的Http不可用JavaEE Spring MVC、406 Spring MVC Json,根据请求“接受”标头不可接受、406不可接受的错误GET参数问题?、ajax - xmlhttprequest send json在php端接受数据的问题等相关知识,可以在本站进行查询。

本文标签: