2014-02-23 74 views
0

我得到一個406錯誤,而在我的本地運行下面的代碼JSON輸出: -406錯誤在春天,傑克遜映射

控制器代碼: -

//imports 
import AvailabilityReportService; 
import SAvailabilityReport; 
@Controller 
@RequestMapping("/service/*") 

public class SAvailabilityController { 
    @Autowired 
    @Qualifier("AvailabilityReportService") 
    private AvailabilityReportService availabilityReportService; 

    @RequestMapping(value = "/{cat}", method = RequestMethod.GET) 
    public @ResponseBody 
    SAvailabilityReport getAvailabilityReport(@PathVariable String cat) { 
     try 
     { 
      return availabilityReportService.generateAvailabilityReport(cat); 
     } catch (Exception e) { 

      e.printStackTrace(); 
      return null; 
     } 
    } 


} 

可用性報告服務類: -

import SAvailabilityReport; 
public interface AvailabilityReportService { 


    public SAvailabilityReport generateAvailabilityReport(String cat) throws Exception; 
} 

現在實現上述類availabilityreportserviceimpl類: -

//The required imports 
@Service("AvailabilityReportService") 
public class AvailabilityReportServiceImpl implements AvailabilityReportService { 
    private @Value("${username}") 
    String username; 

    private @Value("${password}") 
    String password; 

    private @Value("${username1}") 
    String username1; 

    private @Value("${password1}") 
    String password1; 

    private PropertiesConfiguration propConfig; 

    @PostConstruct 
    public void initIt() throws Exception { 
     String propertiesFile = "/META-INF/common.properties"; 
     propConfig = new PropertiesConfiguration(this.getClass().getResource(
       propertiesFile)); 
     propConfig.setReloadingStrategy(new FileChangedReloadingStrategy()); 
    } 



public SAvailabilityReport generateAvailabilityReport(String cat) 
     throws Exception { 
    String user; 
    String pass; 
    String time; 
    if (cat == null) 
     return null; 
    String url = (String) propConfig.getProperty("s_" 
      + cat.toLowerCase()); 
    if (url == null) 
     return null; 
    SAvailabilityReport availabilityReport = new SAvailabilityReport(); 
    if((cat.toLowerCase()).equals("h") || (cat.toLowerCase()).equals("f")) 
    { 
     user=username; 
     pass=password; 
    } 
    else 
    { 
     user=username1; 
     pass=password1; 
    } 
    WebClient webClient = provideCredentials(user,pass); 
    HtmlPage resultPage = webClient.getPage(url); 
    HtmlTable resultTable = (HtmlTable) resultPage.getByXPath(
      "//table[@class='data']").get(0); 

    List<HtmlTableRow> rowsList = resultTable.getRows(); 
    int rowsSize = rowsList.size(); 
    time=(resultTable.getCellAt((rowsSize-1),1)).asText(); 


    availabilityReport.settime(time); 
    return availabilityReport; 

} 

private WebClient provideCredentials(String username, String password) { 
    WebClient webClient = new WebClient(); 
    DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient 
      .getCredentialsProvider(); 
    credentialsProvider.addCredentials(username, password); 
    return webClient; 
} 

最後savailabilityreport類是: -

//imports 
public class SAvailabilityReport { 

    private String time; 


    public SAvailabilityReport() 
    { 

    } 
    public void settime(String time) 
    { 
     this.time=time; 
    } 

} 

我做了一些研究,大約在進入傑克遜核心ASL和傑克遜映射器,ASL到我的pom.xml,也是。我已經做了這些但仍然是相同的406錯誤.. 我從中獲取值的URL已在common.proprties文件中與用戶名和密碼一起定義。

+0

你的客戶是什麼樣子,即你如何測試這個。 406錯誤與客戶端的Accept頭問題有關。覈實。 – arahant

+0

以及我正在通過運行Maven構建然後獲取戰爭文件並部署在碼頭服務器上,然後使用瀏覽器檢查輸出來測試。如何檢查客戶端的接受頭文件?我是一個小菜,所以請準確。謝謝 – david419

+0

也在@RequestMapping中,如果我設置headers = {「content-type = application/json」}它會拋出415錯誤,不支持的媒體類型 – david419

回答

0

問題解決了,它只是在格式化程序類中沒有setter的情況。只要我把setter放在我的格式化類中,它就開始工作了。