{"id":83746,"date":"2018-11-21T10:00:55","date_gmt":"2018-11-21T08:00:55","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=83746"},"modified":"2018-11-20T12:07:34","modified_gmt":"2018-11-20T10:07:34","slug":"spring-data-thymeleaf","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html","title":{"rendered":"Spring Data with Thymeleaf"},"content":{"rendered":"<h2>Intro<\/h2>\n<p>Today I&#8217;ll talk about more specific issues. No design patterns or algorithms this time :-). We don&#8217;t always design software components from scratch. Often we have to try to make existing software components work together.<\/p>\n<p><a href=\"https:\/\/spring.io\/projects\/spring-boot\">Spring Boot<\/a> is one the best free software in the Java world. It resolved a lot of configuration issues with Spring. It is very flexible and offers great functionality.<\/p>\n<p><a href=\"http:\/\/projects.spring.io\/spring-data\/\">Spring Data<\/a> is part of the Spring collection of projects. It offers advanced tools for working with databases. Among the most useful is the automatic repository. A class can implement JpaRepository and most methods for working with data will be created automatically.<\/p>\n<p><a href=\"https:\/\/www.thymeleaf.org\/\">Thymeleaf<\/a> is an HTML template engine. It can use some of Spring Boot&#8217;s features, like call methods of Spring beans in the template and a lot of other stuff. The official documentation has great tutorials.<\/p>\n<p>I used\u00a0 spring-boot-starter-parent versions\u00a0 2.0.1.RELEASE &#8211;\u00a02.0.4.RELEASE. Other dependencies were provided by Spring Boot.<\/p>\n<h2>Problem Description<\/h2>\n<p>The main idea of any application that is working with Spring Boot, Spring Data and Thymeleaf is to edit data in the database. Spring-boot-starter-data-jpa includes Hibernate which can be used to manipulate the data in the database. Thymeleaf can be used to show the data to the user. Spring Boot wires it all together.<\/p>\n<p>A very simple scenario includes one entity with a one-to-many relationship with another entity. The user wants to be able to create a new entity and select the other entity in a HTML<br \/>\nselect box.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/pic1-1-1.png\"><img decoding=\"async\" class=\"aligncenter wp-image-83755 size-full\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/pic1-1-1.png\" alt=\"Thymeleaf\" width=\"208\" height=\"172\" \/><\/a><div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>Here is where the first issue shows up. With the standard Thymeleaf structure the backing bean cannot be assembled.The object that was selected in the select box with the following construct:<\/p>\n<pre class=\"brush:xml\">&lt;form action=\"#\" th:action=\"@{\/&lt;some Action&gt;}\" th:object=\"${beanObj}\" method=\"post\"&gt;\r\n\r\n    .... &lt;other fields&gt;\r\n\r\n    &lt;select th:field=\"*{room}\" class=\"textinput\"&gt;\r\n        &lt;option th:each=\"currRoom : ${allRooms}\"      \r\n            th:value=\"${currRoom}\" th:text=\"${currRoom.name}\"&gt;no   \r\n            name&lt;\/option&gt;\r\n    &lt;\/select&gt;\r\n&lt;\/form&gt;<\/pre>\n<p>is not created by Thymeleaf. I didn&#8217;t find any mention of this in the official documentation.<\/p>\n<h2>Solution<\/h2>\n<p>After some debugging I found the root cause. It turned out Thymeleaf passes all the fields as parameters to the POST request. It uses the toString method to transform the object to String and add as a parameter to the POST request. It sends a parameter like this:<\/p>\n<pre class=\"brush:bash\">room: Room+[id=273,+name=room111]<\/pre>\n<p>In the controller method this value must be transformed back to the object form. Spring Boot uses converters to do this.<\/p>\n<p>The solution is &#8211; register the appropriate converters with the conversionService. And use these converters in the toString method of the entities to make sure the same method is used to convert to the String form and back.<\/p>\n<h2>Next Problems<\/h2>\n<p>Sounds funny isn&#8217;t it? The solution has been found but more problems? Actually the described solution works well without Spring Data. With Spring Data the conversion fails again. And Spring Boot wants you to create the entityManagerFactory bean even though this bean was not needed without Spring Data.<\/p>\n<h2>Next Solutions<\/h2>\n<p>The problem with the entityManagerFactory bean can be resolved by means of some intensive search on the Internet. Here is the solution I ended up with:<\/p>\n<pre class=\"brush:java\">@Primary\r\n    @Bean\r\n    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource ds) {\r\n       LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();\r\n       em.setDataSource(ds);\r\n       em.setPackagesToScan(\"&lt;some packages&gt;\");\r\n\r\n       JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();\r\n       em.setJpaVendorAdapter(vendorAdapter);\r\n       em.setJpaProperties(additionalProperties());\r\n       return em;\r\n    }\r\n\r\n    @Bean\r\n    public SessionFactory sessionFactory(@Qualifier(\"entityManagerFactory\") EntityManagerFactory emf) {\r\n        return emf.unwrap(SessionFactory.class);\r\n    }\r\nprivate Properties additionalProperties() {\r\n        Properties properties = new Properties();\r\n        properties.setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.PostgreSQLDialect\");\r\n        properties.setProperty(\"hibernate.default_schema\", \"public\");\r\n        properties.setProperty(\"hibernate.show_sql\", \"true\");\r\n        \/\/ Validation will fail because the tables use bigint as the ID but it is mapped to the Integer type by Hibernate\r\n        \/\/ Validation expects a 8-bit number as the mapping to bigint.\r\n        properties.setProperty(\"hibernate.hbm2ddl.auto\", \"none\");\r\n        return properties;\r\n    }<\/pre>\n<p>The second problem turned out to be more complicated and required a lot of debugging. Eventually I found out that spring-data somehow changes the conversion service that Spring Boot is using. Instead of the default conversionService with Spring Data\u00a0 mvcConversionService is used. The formatters\/converters must be added in your\u00a0WebMvcConfigurer class (the class that implements WebMvcConfigurer). The method is addFormatters:<\/p>\n<pre class=\"brush:java\">@Override\r\n    public void addFormatters(FormatterRegistry registry) {\r\n\r\n        registry.addConverter(new &lt;SomeConverter&gt;);\r\n        ...<\/pre>\n<p>Now with all problems resolved Spring Data can work with Thymeleaf.<br \/>\nHappy coding and diligent debugging!<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>Published on Java Code Geeks with permission by Vadim Korkin, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener\">JCG program<\/a>. See the original article here: <a href=\"http:\/\/java-xlt.blogspot.com\/2018\/08\/spring-data-with-thymeleaf.html\" target=\"_blank\" rel=\"noopener\">Spring Data with Thymeleaf<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Intro Today I&#8217;ll talk about more specific issues. No design patterns or algorithms this time :-). We don&#8217;t always design software components from scratch. Often we have to try to make existing software components work together. Spring Boot is one the best free software in the Java world. It resolved a lot of configuration issues &hellip;<\/p>\n","protected":false},"author":59027,"featured_media":240,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[854,321,739],"class_list":["post-83746","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-spring-boot","tag-spring-data","tag-thymeleaf"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Data with Thymeleaf - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about Thymeleaf? Check our article explaining how Thymeleaf an HTML template engine can use some of Spring Boot&#039;s features.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Data with Thymeleaf - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Thymeleaf? Check our article explaining how Thymeleaf an HTML template engine can use some of Spring Boot&#039;s features.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-21T08:00:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Vadim Korkin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vadim Korkin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html\"},\"author\":{\"name\":\"Vadim Korkin\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/fd9943d9347cd4eebd6b089feec8785a\"},\"headline\":\"Spring Data with Thymeleaf\",\"datePublished\":\"2018-11-21T08:00:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html\"},\"wordCount\":601,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"keywords\":[\"Spring Boot\",\"Spring Data\",\"Thymeleaf\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html\",\"name\":\"Spring Data with Thymeleaf - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"datePublished\":\"2018-11-21T08:00:55+00:00\",\"description\":\"Interested to learn about Thymeleaf? Check our article explaining how Thymeleaf an HTML template engine can use some of Spring Boot's features.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"spring-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/spring-data-thymeleaf.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Spring Data with Thymeleaf\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/fd9943d9347cd4eebd6b089feec8785a\",\"name\":\"Vadim Korkin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0c4cc707cb0fa8a552331648d03756d2abcec29e879e998a7fdc205d92662cbc?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0c4cc707cb0fa8a552331648d03756d2abcec29e879e998a7fdc205d92662cbc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0c4cc707cb0fa8a552331648d03756d2abcec29e879e998a7fdc205d92662cbc?s=96&d=mm&r=g\",\"caption\":\"Vadim Korkin\"},\"description\":\"Vadim is a senior software engineer with lots of experience with different software technologies including Java, Javascript, databases (Oracle and Postgres), HTML\\\/CSS and even machine learning. He likes learning new technologies and using the latest libraries in his work. Vadim also has some personal projects on Github\",\"sameAs\":[\"http:\\\/\\\/java-xlt.blogspot.com\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/vadim-korkin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Data with Thymeleaf - Java Code Geeks","description":"Interested to learn about Thymeleaf? Check our article explaining how Thymeleaf an HTML template engine can use some of Spring Boot's features.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html","og_locale":"en_US","og_type":"article","og_title":"Spring Data with Thymeleaf - Java Code Geeks","og_description":"Interested to learn about Thymeleaf? Check our article explaining how Thymeleaf an HTML template engine can use some of Spring Boot's features.","og_url":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2018-11-21T08:00:55+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","type":"image\/jpeg"}],"author":"Vadim Korkin","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Vadim Korkin","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html"},"author":{"name":"Vadim Korkin","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/fd9943d9347cd4eebd6b089feec8785a"},"headline":"Spring Data with Thymeleaf","datePublished":"2018-11-21T08:00:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html"},"wordCount":601,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","keywords":["Spring Boot","Spring Data","Thymeleaf"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html","url":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html","name":"Spring Data with Thymeleaf - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","datePublished":"2018-11-21T08:00:55+00:00","description":"Interested to learn about Thymeleaf? Check our article explaining how Thymeleaf an HTML template engine can use some of Spring Boot's features.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","width":150,"height":150,"caption":"spring-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/spring-data-thymeleaf.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Spring Data with Thymeleaf"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/fd9943d9347cd4eebd6b089feec8785a","name":"Vadim Korkin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0c4cc707cb0fa8a552331648d03756d2abcec29e879e998a7fdc205d92662cbc?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0c4cc707cb0fa8a552331648d03756d2abcec29e879e998a7fdc205d92662cbc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c4cc707cb0fa8a552331648d03756d2abcec29e879e998a7fdc205d92662cbc?s=96&d=mm&r=g","caption":"Vadim Korkin"},"description":"Vadim is a senior software engineer with lots of experience with different software technologies including Java, Javascript, databases (Oracle and Postgres), HTML\/CSS and even machine learning. He likes learning new technologies and using the latest libraries in his work. Vadim also has some personal projects on Github","sameAs":["http:\/\/java-xlt.blogspot.com"],"url":"https:\/\/www.javacodegeeks.com\/author\/vadim-korkin"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/83746","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/59027"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=83746"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/83746\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/240"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=83746"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=83746"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=83746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}