【发布时间】:2014-02-23 14:10:47
【问题描述】:
在我的本地主机上运行以下代码时出现 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;
}
}
我已经做了一些关于将 jackson-core-asl 和 jackson-mapper-asl 输入到我的 pom.xml 中的研究,而且。我已经完成了这些但仍然是相同的 406 错误.. 我从中获取值的 url 与用户名和密码一起在 common.proprties 文件中定义。
【问题讨论】:
-
您的客户是什么样的,即您如何测试它。 406 错误与客户端的 Accept 标头问题有关。检查一下。
-
嗯,我正在通过运行 maven 构建然后获取一个 war 文件并部署在码头服务器上进行测试,然后使用浏览器检查输出。如何检查客户端的接受标头?我是这方面的菜鸟,所以请准确。谢谢
-
如果我设置 headers={"content-type=application/json"} 也会在 @RequestMapping 中抛出 415 错误,不支持的媒体类型
标签: java json spring-mvc jackson http-status-code-406