Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot为不同视图定制ViewResolver。查看json、xml、pdf和xls的呈现_Java_Xml_Spring_Spring Boot_Xml Parsing - Fatal编程技术网

Java Spring Boot为不同视图定制ViewResolver。查看json、xml、pdf和xls的呈现

Java Spring Boot为不同视图定制ViewResolver。查看json、xml、pdf和xls的呈现,java,xml,spring,spring-boot,xml-parsing,Java,Xml,Spring,Spring Boot,Xml Parsing,我有两种观点(用户、事故)。构建能为用户正常工作的应用程序。在我需要修改的地方,它适用于许多视图 对于Json,我得到了两个视图的结果 它的作用是: localhost:9001/user_data.xml localhost:9001/user_data.json 本地主机:9001/user\u data.pdf 本地主机:9001/user_data.xls 本地主机:9001/contract_data.json 我想为以下对象渲染数据: 本地主机:9001/contract_data.

我有两种观点(用户、事故)。构建能为用户正常工作的应用程序。在我需要修改的地方,它适用于许多视图

对于Json,我得到了两个视图的结果

它的作用是:

localhost:9001/user_data.xml

localhost:9001/user_data.json

本地主机:9001/user\u data.pdf

本地主机:9001/user_data.xls

本地主机:9001/contract_data.json

我想为以下对象渲染数据:

本地主机:9001/contract_data.xml

本地主机:9001/contract\u data.pdf

本地主机:9001/contract_data.xls

当我将pdf、xls和xml的代码分别放入由AbstractView扩展的相应视图中时

我需要更新代码,有人能指导我吗?在这里,我收集视图名称并修改响应

对于XML,我像这样编码:

公共抽象类AbstractXmlView扩展了AbstractView{

public AbstractXmlView() {
    setContentType("application/xml");
}

@Override
protected boolean generatesDownloadContent() {
    return true;
}

@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,HttpServletResponse response) throws Exception {
     response.setContentType(getContentType());
     buildXmlDocument(model, request, response);
     System.out.println(response);

}

public abstract void buildXmlDocument(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response);
public AbstractXmlView(){
setContentType(“应用程序/xml”);
}
@凌驾
受保护的布尔生成下载内容(){
返回true;
}
@凌驾
受保护的void RenderMergeDoutpModel(映射模型、HttpServletRequest请求、HttpServletResponse响应)引发异常{
setContentType(getContentType());
buildXmlDocument(模型、请求、响应);
System.out.println(响应);
}
公共抽象void buildXmlDocument(映射模型、HttpServletRequest请求、HttpServletResponse响应);
}

@组成部分 公共类XmlView扩展了AbstractXmlView{

@SuppressWarnings("unchecked")
@Override
public void buildXmlDocument(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) {
    // TODO Auto-generated method stub
     response.setContentType("application/xml");
     response.setCharacterEncoding("UTF-8");

    JAXBContext jaxbContext = null;
    Marshaller jaxbMarshaller = null;
    try {
        jaxbContext = JAXBContext.newInstance(Users.class);
        jaxbMarshaller = jaxbContext.createMarshaller();
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
        Users users=new Users();
        users.setUser( (List<User>) model.get("users"));
        System.out.println("Users Object: "+users.getUser());
        jaxbMarshaller.marshal(users, response.getWriter());
    } catch (Exception e) {
        e.printStackTrace();
    }


    //jaxbMarshaller.marshal(Users, System.out);

}
@SuppressWarnings(“未选中”)
@凌驾
public void buildXmlDocument(映射模型、HttpServletRequest请求、HttpServletResponse响应){
//TODO自动生成的方法存根
setContentType(“应用程序/xml”);
响应。setCharacterEncoding(“UTF-8”);
JAXBContext JAXBContext=null;
Marshaller jaxbMarshaller=null;
试一试{
jaxbContext=jaxbContext.newInstance(Users.class);
jaxbMarshaller=jaxbContext.createMarshaller();
setProperty(Marshaller.JAXB_格式化的_输出,true);
用户=新用户();
users.setUser((列表)model.get(“用户”);
System.out.println(“用户对象:+Users.getUser());
jaxbMarshaller.marshall(用户,response.getWriter());
}捕获(例外e){
e、 printStackTrace();
}
//jaxbMarshaller.marshall(用户,System.out);
}
}

添加到解析器中:

@Bean
public ViewResolver xmlViewResolver() {

    return new XmlViewResolver();
}

@Bean
public ViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager) {
    ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();
    resolver.setContentNegotiationManager(manager);

    // Define all possible view resolvers
    List<ViewResolver> resolvers = new ArrayList<>();
    resolvers.add(xmlViewResolver());
    resolvers.add(csvViewResolver());
    resolvers.add(excelViewResolver());
    resolvers.add(pdfViewResolver());
    resolvers.add(jsonViewResolver());
    resolver.setViewResolvers(resolvers);
    return resolver;
}
@Bean
公共ViewResolver xmlViewResolver(){
返回新的XmlViewResolver();
}
@豆子
公共视图解析程序contentnegotingviewresolver(ContentNegotiationManager){
ContentNegotingViewResolver解析器=新建ContentNegotingViewResolver();
解析程序.setContentNegotiationManager(管理器);
//定义所有可能的视图解析器
列表解析程序=新的ArrayList();
add(xmlviewsolver());
add(csvViewResolver());
add(excelviewsolver());
add(pdfViewResolver());
add(jsonviewsolver());
分解器。SetViewResolver(分解器);
返回解析器;
}

找到解决方案了吗?没有,我还没有找到解决方案。我被迫在控制器级别处理它,比如:MS Word文档的@GetMapping(path=“/viewVoteProtocol”,products=“application/vnd.openxmlformats of cedocument.wordprocessingml.document”);我认为您应该根据contorller方法尝试相应的MIME类型,从而覆盖每个解析器值。