2015-11-13 67 views
0

我的工作在Spring MVC和Jsoup和寫的春天控制器,發送這是從下面的代碼獲得的Jsoup Connection.Response返回JSoup Conncetion.Response爲響應:需要從Spring MVC的控制器

@RequestMapping(method = RequestMethod.POST, value = "/getPage") 
public Connection.Response getJsoupResponsePage(Principal loggedInUser, 
           HttpServletRequest request,HttpServletResponse response) { 

Connection.Response res = Jsoup.connect(url) 
           .data("j_username", "username") 
           .data("j_password", "password") 
           .method(Method.POST).execute(); 
return res; 
} 

我需要完整的Connection.Response對象才能在瀏覽器的新選項卡中打開。

我從瀏覽器調用jquery ajax請求,url是不同的域名,所以我已經打開該網址的會話,然後發送請求到/getPage

var ajax_params; 
ajax_params = { 
      url : "getPage", 
      type : "POST", 
      cache : false, 

      success : function(response) { 
       console.log(response); 
      }, error : function() { 
       console.log("ERROR"); 
      } 
    } 
$.ajax(ajax_params); 

我得到406不能接受的,我在Ajax調用收到錯誤。

的pom.xml提前

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.sunplus</groupId> 
<artifactId>myproject</artifactId> 
<version>1.0.1-SNAPSHOT</version> 

<name>myproject</name> 
<packaging>war</packaging> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.2.5.RELEASE</version> 
</parent> 

<dependencies> 

    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
    </dependency> 

    <!-- For Spring Boot when running in non-embedded Tomcat --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-websocket</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Servlet --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>javax.servlet.jsp-api</artifactId> 
     <version>${javax.servlet.jsp-api.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>javax.el</groupId> 
     <artifactId>el-api</artifactId> 
     <version>2.2</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <!-- Password Validation --> 
    <dependency> 
     <groupId>org.passay</groupId> 
     <artifactId>passay</artifactId> 
     <version>1.0</version> 
    </dependency> 

    <!-- Spring Data JPA dependencies --> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
    </dependency> 
    <!-- <dependency> --> 
    <!-- <groupId>xml-apis</groupId> --> 
    <!-- <artifactId>xml-apis</artifactId> --> 
    <!-- <version>1.4.01</version> --> 
    <!-- </dependency> --> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
    </dependency> 

    <!-- DB dependencies --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>mail</artifactId> 
     <version>1.4.7</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>${guava.version}</version> 
    </dependency> 

    <!-- logging --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <!-- <scope>runtime</scope> --> <!-- some spring dependencies need to compile against jcl --> 
    </dependency> 
    <dependency> <!-- needed to bridge to slf4j for projects that use the log4j APIs directly --> 
     <groupId>org.slf4j</groupId> 
     <artifactId>log4j-over-slf4j</artifactId> 
    </dependency> 

    <!-- test --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>com.jayway.restassured</groupId> 
     <artifactId>rest-assured</artifactId> 
     <version>2.4.0</version> 
     <scope>test</scope> 
     <exclusions> 
      <exclusion> 
       <artifactId>commons-logging</artifactId> 
       <groupId>commons-logging</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

</dependencies> 

<build> 
    <finalName>myproject</finalName> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
     </resource> 
    </resources> 

    <plugins> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>${java-version}</source> 
       <target>${java-version}</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.cargo</groupId> 
      <artifactId>cargo-maven2-plugin</artifactId> 
      <version>${cargo-maven2-plugin.version}</version> 
      <configuration> 
       <wait>true</wait> 
       <container> 
        <containerId>tomcat8x</containerId> 
        <type>embedded</type> 
        <systemProperties> 
         <!-- <provPersistenceTarget>cargo</provPersistenceTarget> --> 
        </systemProperties> 
       </container> 
       <configuration> 
        <properties> 
         <cargo.servlet.port>8081</cargo.servlet.port> 
        </properties> 
       </configuration> 
      </configuration> 
     </plugin> 

    </plugins> 
</build> 

<properties> 
    <java-version>1.7</java-version> 
    <org.springframework-version>4.1.6.RELEASE</org.springframework-version> 
    <org.springframework.security.version>4.0.2.RELEASE</org.springframework.security.version> 

    <!-- logging --> 
    <org.slf4j.version>1.7.12</org.slf4j.version> 
    <logback.version>1.1.3</logback.version> 

    <!-- javax jsp --> 
    <javax.servlet.jsp-api.version>2.3.2-b01</javax.servlet.jsp-api.version> 

    <!-- Inject --> 
    <javax.inject.version>1</javax.inject.version> 

    <!-- Spring Data Jpa --> 
    <spring-data-jpa.version>1.8.0.RELEASE</spring-data-jpa.version> 

    <!-- guava --> 
    <guava.version>18.0</guava.version> 

    <!-- maven --> 
    <cargo-maven2-plugin.version>1.4.15</cargo-maven2-plugin.version> 

</properties> 

感謝。

+0

所以你想在你的迴應中發送一個Java對象,讓客戶端以某種方式使用它?也許你想從這個Connection.Response實例發送(String)內容? –

+0

用spring和你的pom.xml版本更新你的問題 –

+0

我使用Spring 4.1.6.RELEASE和Jsoup 1.8.1 – Yogeendra

回答

0

406 http狀態碼是not acceptable。 這意味着你的情況下彈簧不能Could not find acceptable representation爲你的Connection.Response對象。 將其更改爲String並返回JSOUP響應的主體。

@RequestMapping(method = RequestMethod.POST, value = "/page") 
public @ResponseBody String getJsoupResponsePage(HttpServletRequest request,HttpServletResponse response) throws IOException { 

    Connection.Response res = Jsoup.connect("http://abv.bg") 
      .data("j_username", "username") 
      .data("j_password", "password") 
      .method(Connection.Method.POST).execute(); 
    return res.body(); 
} 

,並用此方法AJAX調用它:

var ajax_params = { 
      url : "page", 
      type : "POST", 
      cache : false, 
      success : function(response) { 
       console.log(response); 
      }, error : function() { 
       console.log("ERROR"); 
      } 
    } 
$.ajax(ajax_params); 

PS:我有點有點納悶你正在嘗試做的。只是解決了406錯誤。