【问题标题】:406 error in spring, json output with jackson mapper春季出现406错误,使用杰克逊映射器输出json
【发布时间】: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


【解决方案1】:

问题已解决,这只是格式化程序类中没有设置器的情况。一旦我将设置器放入我的格式化程序类中,它就开始工作了。

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 2015-12-23
    • 2016-04-15
    • 2022-08-16
    • 2015-10-19
    • 1970-01-01
    • 2017-12-04
    • 2013-03-02
    相关资源
    最近更新 更多