当前位置: 首页 > news >正文

北京教育云平台网站建设杭州网站设计网站

北京教育云平台网站建设,杭州网站设计网站,我要自学网做网站,公众号怎么做小程序atom feed如何仅使用两个类就将提要#xff08;Atom#xff09;添加到Web应用程序#xff1f; Spring MVC呢#xff1f; 这是我的假设#xff1a; 您正在使用Spring框架 您有一些要发布在供稿中的实体#xff0c;例如“新闻” 您的“新闻”实体具有creationDate#… atom feed 如何仅使用两个类就将提要Atom添加到Web应用程序 Spring MVC呢 这是我的假设 您正在使用Spring框架 您有一些要发布在供稿中的实体例如“新闻” 您的“新闻”实体具有creationDatetitle和shortDescription 您有一些存储库/仓库例如“ NewsRepository”它将从数据库中返回新闻 你想写得尽可能少 您不想手动格式化Atomxml 实际上您实际上不需要在应用程序中使用Spring MVC。 如果这样做请跳至步骤3。 步骤1将Spring MVC依赖项添加到您的应用程序 使用Maven将是 dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion3.1.0.RELEASE/version /dependency 步骤2添加Spring MVC DispatcherServlet 使用web.xml将是 servletservlet-namedispatcher/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:spring-mvc.xml/param-value/init-paramload-on-startup1/load-on-startup /servlet servlet-mappingservlet-namedispatcher/servlet-nameurl-pattern/feed/url-pattern /servlet-mapping 注意我将url-pattern设置为“ / feed”这意味着我不希望Spring MVC在我的应用程序中处理任何其他url我在其余的应用程序中使用了不同的Web框架。 我还给它提供了一个全新的contextConfigLocation其中仅保留了mvc配置。 请记住将DispatcherServlet添加到已经具有Spring的应用程序例如从ContextLoaderListener继承时您的上下文是从全局实例继承的因此您不应创建在该实例中再次存在的bean也不应包含定义它们的xml。 注意两次Spring上下文并参考spring或servlet文档以了解发生了什么。 步骤3.添加ROME –处理Atom格式的库 与Maven的是 dependencygroupIdnet.java.dev.rome/groupIdartifactIdrome/artifactIdversion1.0.0/version /dependency 步骤4.编写非常简单的控制器 Controller public class FeedController {static final String LAST_UPDATE_VIEW_KEY lastUpdate;static final String NEWS_VIEW_KEY news;private NewsRepository newsRepository;private String viewName;protected FeedController() {} //required by cglibpublic FeedController(NewsRepository newsRepository, String viewName) {notNull(newsRepository); hasText(viewName);this.newsRepository newsRepository;this.viewName viewName;}RequestMapping(value /feed, method RequestMethod.GET) Transactionalpublic ModelAndView feed() {ModelAndView modelAndView new ModelAndView();modelAndView.setViewName(viewName);ListNews news newsRepository.fetchPublished();modelAndView.addObject(NEWS_VIEW_KEY, news);modelAndView.addObject(LAST_UPDATE_VIEW_KEY, getCreationDateOfTheLast(news));return modelAndView;}private Date getCreationDateOfTheLast(ListNews news) {if(news.size() 0) {return news.get(0).getCreationDate();}return new Date(0);} } 如果您想复制并粘贴谁不想要这是一个测试 RunWith(MockitoJUnitRunner.class) public class FeedControllerShould {Mock private NewsRepository newsRepository;private Date FORMER_ENTRY_CREATION_DATE new Date(1);private Date LATTER_ENTRY_CREATION_DATE new Date(2);private ArrayListNews newsList;private FeedController feedController;Beforepublic void prepareNewsList() {News news1 new News().title(title1).creationDate(FORMER_ENTRY_CREATION_DATE);News news2 new News().title(title2).creationDate(LATTER_ENTRY_CREATION_DATE);newsList newArrayList(news2, news1);}Beforepublic void prepareFeedController() {feedController new FeedController(newsRepository, viewName);}Testpublic void returnViewWithNews() {//givengiven(newsRepository.fetchPublished()).willReturn(newsList);//whenModelAndView modelAndView feedController.feed();//thenassertThat(modelAndView.getModel()).includes(entry(FeedController.NEWS_VIEW_KEY, newsList));}Testpublic void returnViewWithLastUpdateTime() {//givengiven(newsRepository.fetchPublished()).willReturn(newsList);//whenModelAndView modelAndView feedController.feed();//thenassertThat(modelAndView.getModel()).includes(entry(FeedController.LAST_UPDATE_VIEW_KEY, LATTER_ENTRY_CREATION_DATE));}Testpublic void returnTheBeginningOfTimeAsLastUpdateInViewWhenListIsEmpty() {//givengiven(newsRepository.fetchPublished()).willReturn(new ArrayListNews());//whenModelAndView modelAndView feedController.feed();//thenassertThat(modelAndView.getModel()).includes(entry(FeedController.LAST_UPDATE_VIEW_KEY, new Date(0)));} } 注意在这里我正在使用fest-assert和mockito。 依赖项是 dependencygroupIdorg.easytesting/groupIdartifactIdfest-assert/artifactIdversion1.4/versionscopetest/scope /dependency dependencygroupIdorg.mockito/groupIdartifactIdmockito-all/artifactIdversion1.8.5/versionscopetest/scope /dependency 步骤5.编写非常简单的视图 这是所有魔术格式化发生的地方。 一定要看一看Entry类的所有方法因为您可能想使用/填充很多东西。 import org.springframework.web.servlet.view.feed.AbstractAtomFeedView; [...]public class AtomFeedView extends AbstractAtomFeedView {private String feedId tag:yourFantastiSiteName;private String title yourFantastiSiteName: news;private String newsAbsoluteUrl http://yourfanstasticsiteUrl.com/news/; Overrideprotected void buildFeedMetadata(MapString, Object model, Feed feed, HttpServletRequest request) {feed.setId(feedId);feed.setTitle(title);setUpdatedIfNeeded(model, feed);}private void setUpdatedIfNeeded(MapString, Object model, Feed feed) {SuppressWarnings(unchecked)Date lastUpdate (Date)model.get(FeedController.LAST_UPDATE_VIEW_KEY);if (feed.getUpdated() null || lastUpdate ! null || lastUpdate.compareTo(feed.getUpdated()) 0) {feed.setUpdated(lastUpdate);}}Overrideprotected ListEntry buildFeedEntries(MapString, Object model, HttpServletRequest request, HttpServletResponse response) throws Exception {SuppressWarnings(unchecked)ListNews newsList (ListNews)model.get(FeedController.NEWS_VIEW_KEY);ListEntry entries new ArrayListEntry();for (News news : newsList) {addEntry(entries, news);}return entries;}private void addEntry(ListEntry entries, News news) {Entry entry new Entry();entry.setId(feedId , news.getId());entry.setTitle(news.getTitle());entry.setUpdated(news.getCreationDate());entry setSummary(news, entry);entry setLink(news, entry);entries.add(entry);}private Entry setSummary(News news, Entry entry) {Content summary new Content();summary.setValue(news.getShortDescription());entry.setSummary(summary);return entry;}private Entry setLink(News news, Entry entry) {Link link new Link();link.setType(text/html);link.setHref(newsAbsoluteUrl news.getId()); //because I have a different controller to show news at http://yourfanstasticsiteUrl.com/news/IDentry.setAlternateLinks(newArrayList(link));return entry;}} 步骤6.将类添加到Spring上下文 我正在使用xml方法。 因为我老了我喜欢xml。 不认真地讲我使用xml是因为我可能想用不同的视图RSS 1.0RSS 2.0等多次声明FeedController。 这就是前面提到的spring-mvc.xml ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean classorg.springframework.web.servlet.view.ContentNegotiatingViewResolverproperty namemediaTypesmapentry keyatom valueapplication/atomxml/entry keyhtml valuetext/html//map/propertyproperty nameviewResolverslistbean classorg.springframework.web.servlet.view.BeanNameViewResolver//list/property/beanbean classeu.margiel.pages.confitura.feed.FeedControllerconstructor-arg index0 refnewsRepository/constructor-arg index1 valueatomFeedView//beanbean idatomFeedView classeu.margiel.pages.confitura.feed.AtomFeedView/ /beans 您完成了。 之前我曾被要求将所有工作代码放入某个公共存储库中所以这又是另一回事了。 我已经描述了我已经发布的内容您可以从bitbucket中获取提交。 参考 Solid Craft博客上来自我们JCG合作伙伴 Jakub Nabrdalik的Atom Feeds与Spring MVC 。 翻译自: https://www.javacodegeeks.com/2012/10/spring-mvc-for-atom-feeds.htmlatom feed
http://www.sadfv.cn/news/388588/

相关文章:

  • 做网站顶部图片长度是多少网站建设的关键点
  • 网站引导动画怎么做的html5的网站设计
  • 网络推广网站河南重庆公司注册网站
  • 泉州企业网站建设国外ui设计网站
  • 河南省住房和城乡建设厅网站建立企业的网站有哪几种方案
  • 网站建设需要写代码吗网站二级域名解析
  • 怎么做废品收购网站WordPress底部添加运行时间
  • 设计的网站有哪些高端企业网站建站
  • 网站建设系统 网站自助建站系统盐城网站开发如何
  • 网站设计的价格青岛seo整站优化招商电话
  • 新华网两学一做专题网站网站做seo推广 s
  • 义乌网站建设制作商宁夏建设工程招标投标信息网站
  • 微商网站如何做推广网络推广有哪些方法
  • 中国风古典网站模板常州网红打卡景点
  • 可以看封禁网站的浏览器石家庄网络推广
  • 特产电商网站建设报价单wordpress保存图片插件
  • 之梦网站怎么做seo济南网站建设策划方案
  • 网站如何做中英文双语言哈尔滨做网站价格
  • 企业如何做好网站的seo优化wordpress 文章目录插件
  • 广州百度推广排名优化wordpress打开速度优化
  • icp备案是网站上线前网页设计素材收集
  • 最专业网站建设公司首选商品网站做推广方案
  • 软件最全的网站百度小程序怎么删除
  • 文化网站开发背景产品营销策略
  • asp.net企业门户网站源码简述jsp网站架构
  • 建站设计公司山西网络公司公司
  • 适用于建设微型网站开发wordpress
  • 江苏建设省直报名网站公司装修设计哪家好
  • 顺飞网站建设怎么样公司网站做推广支出分录
  • 济南建站公司效果投资30元一小时赚600