{"id":78579,"date":"2020-09-20T06:25:33","date_gmt":"2020-09-20T06:25:33","guid":{"rendered":"https:\/\/www.baeldung.com\/?p=87377"},"modified":"2020-09-20T06:25:33","modified_gmt":"2020-09-20T06:25:33","slug":"json-parameters-with-spring-mvc","status":"publish","type":"post","link":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/2020\/09\/20\/json-parameters-with-spring-mvc\/","title":{"rendered":"JSON Parameters with Spring MVC"},"content":{"rendered":"<p class=\"syndicated-attribution\"><meta name= \\\"keywords \\\" content= \\\"\u96fb\u5b50\u8a08\u7b97\u6a5f, \u6559\u80b2, IT \u96fb\u8166\u73ed,\u96fb\u8166\u88dc\u7fd2\uff0c \u96fb\u8166\u73ed\uff0c \u5bb6\u6559\uff0c \u79c1\u4eba\u8001\u5e2b\uff0c \u8cc7\u8a0a\u6280\u8853\uff0c \u7a0b\u5e8f\u8a2d\u8a08\uff0c \u96fb\u5b50\u8a08\u7b97\u6a5f\uff0c \u904a\u6232\uff0c \u860b\u679c\uff0c \u96fb\u5f71\uff0c \u8a08\u7b97\u6a5f\uff0c\u7de8\u78bc\uff0c Java\uff0c C\/C++\uff0c JavaScript\uff0c PHP\uff0c HTML\uff0c CSS\uff0c MySQL\uff0c mobile\uff0c Android\uff0c \u52d5\u6f2b\uff0c Python\uff0c teacher\uff0c \u88dc\u7fd2\uff0c \u96fb\u8166\u88dc\u7fd2 \u8cc7\u8a0a, \u7535\u5b50\u8ba1\u7b97\u673a, IT ,Game, apple, movie, Computer,student,Java,\u6559\u80b2, ,\u5b66\u751f, \u5b66\u4e60, learn, \u6559\u5b66,  Android, apple,anime, animation, \u4fe1\u606f\u6280\u672f, \u7a0b\u5e8f\u8bbe\u8ba1, \u79fb\u52a8\u7535\u8bdd, \u8cc7\u8a0a\u79d1\u6280,Game, Jeu, Juego,Call Of Duty ,\u4f7f\u547d\u53ec\u559a , \u6e38\u620f, \u7535\u5b50\u6e38\u620f,, \u591a\u4eba\u7535\u5b50\u6e38\u620f, \u7f51\u7edc\u6e38\u620f\uff0conline\uff0conline game, \u624b\u673a\u6e38\u620f, mobile \\\"><\/p>\n<h2 data- data-id=\"overview\">1. Overview<\/h2>\n<div class=\"bd-anchor\" id=\"overview\"><\/div>\n<p>In this short tutorial, we&#8217;re going to take a close look at how to work with JSON parameters in Spring MVC.<\/p>\n<p>First, we&#8217;ll start with a little bit\u00a0of\u00a0background on JSON parameters. Then, we&#8217;ll go down the rabbit hole to see how to send JSON parameters in POST and GET requests.<\/p>\n<h2 data-id=\"json-parameters-in-spring-mvc\">2. JSON Parameters in Spring MVC<\/h2>\n<div class=\"bd-anchor\" id=\"json-parameters-in-spring-mvc\"><\/div>\n<p>Using <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-org-json\">JSON<\/a> to send or receive data is a common practice among web developers. The hierarchical structure of the JSON strings offers a more compact and human-readable way to represent HTTP request parameters.<\/p>\n<p>By default, Spring MVC provides out-of-the-box data binding for simple data types such as <em>String<\/em>. <strong>For that purpose, it uses a <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/docs.spring.io\/spring\/docs\/current\/javadoc-api\/org\/springframework\/beans\/propertyeditors\/package-summary.html\">list of built-in property editors<\/a> under-the-hood.<\/strong><\/p>\n<p>However, in real-world projects, we may want to bind more complex data types. For example, it might be handy to be able to map a JSON parameter into a model object.<\/p>\n<h2 data-id=\"send-json-data-in-post\">3. Send JSON Data in POST<\/h2>\n<div class=\"bd-anchor\" id=\"send-json-data-in-post\"><\/div>\n<p>Spring provides a straightforward way to send JSON data via POST requests. The <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/spring-request-response-body#@requestbody\">built-in <em>@RequestBody <\/em>annotation<\/a> can\u00a0automatically deserialize the JSON data encapsulated in the request body into a particular model object.<\/p>\n<p>In general, we don&#8217;t have to parse the request body ourselves. <strong>We can use the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/jackson\">Jackson library<\/a> to do all the heavy lifting for us<\/strong>.<\/p>\n<p>Now, let&#8217;s see how to send JSON data via a POST request in Spring MVC.<\/p>\n<p>Firstly, we need to create a model object to represent the passed JSON data. For instance, consider the <em>Product<\/em> class:<\/p>\n<pre><code class=\"language-java\">public class Product {\r\n    private int id;\r\n    private String name;\r\n    private double price;\r\n    \/\/ default constructor + getters + setters\r\n}<\/code><\/pre>\n<p>Secondarily, let&#8217;s define a Spring handler method that accepts POST requests:<\/p>\n<pre><code class=\"language-java\">@PostMapping(\"\/create\")\r\n@ResponseBody\r\npublic Product createProduct(@RequestBody Product product) {\r\n    \/\/ custom logic\r\n    return product;\r\n}<\/code><\/pre>\n<p>As we can see, <strong>annotating the <em>product <\/em>argument with <em>@RequestBody<\/em> is enough to bind the JSON data sent from the clients<\/strong>.<\/p>\n<p>Now, we can test our POST request using <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/curl-rest\">cURL<\/a>:<\/p>\n<pre><code class=\"language-bash\">curl -i \\\r\n-H \"Accept: application\/json\" \\\r\n-H \"Content-Type: application\/json\" \\\r\n-X POST --data \\\r\n  '{\"id\": 1,\"name\": \"Asus Zenbook\",\"price\": 800}' \"http:\/\/localhost:8080\/spring-mvc-basics-4\/products\/create\"<\/code><\/pre>\n<h2 data-id=\"send-json-parameter-in-get\">4. Send JSON Parameter in GET<\/h2>\n<div class=\"bd-anchor\" id=\"send-json-parameter-in-get\"><\/div>\n<p>Spring MVC offers <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/spring-request-param\"><em>@RequestParam<\/em><\/a> to extract query parameters from GET requests. However, unlike <em>@RequestBody, <\/em>the<em> @RequestParam <\/em>annotation supports only simple data types such as <em>int<\/em> and <em>String<\/em>.<\/p>\n<p>So, to send JSON, we&#8217;ll need to define our JSON parameter as a simple string.<\/p>\n<p>The big question here is: How do we convert our JSON parameter (which is a <em>String<\/em>) into an object of the <em>Product<\/em> class?<\/p>\n<p>The answer is pretty simple! <strong>The <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/jackson-object-mapper-tutorial\"><em>ObjectMapper<\/em> class<\/a> provided by the Jackson library offers a flexible way to convert JSON strings into Java objects<\/strong>.<\/p>\n<p>Now, let&#8217;s see how to send a JSON parameter via a GET request in Spring MVC. First, we&#8217;ll need to create another handler method in our controller to handle GET requests:<\/p>\n<pre><code class=\"language-java\">@GetMapping(\"\/get\")\r\n@ResponseBody\r\npublic Product getProduct(@RequestParam String product) throws JsonMappingException, JsonProcessingException {\r\n    Product prod = objectMapper.readValue(product, Product.class);\r\n    return prod;\r\n}<\/code><\/pre>\n<p>As shown above, the <em>readValue()<\/em> method allows deserializing the JSON parameter <em>product<\/em> directly into an instance of the <em>Product<\/em> class.<\/p>\n<p>Note that we define our JSON query parameter as a <em>String<\/em> object. Now, what if we want to pass a <em>Product<\/em> object like we did when using <em>@RequestBody<\/em>?<\/p>\n<p>To answer this question, Spring provides a concise and flexible solution through <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/spring-mvc-custom-property-editor\">custom property editors<\/a>.<\/p>\n<p>First, <strong>we&#8217;ll need to create a custom property editor to encapsulate the logic of converting the JSON parameter given as a <em>String<\/em> to a <em>Product\u00a0<\/em>object<\/strong>:<\/p>\n<pre><code class=\"language-java\">public class ProductEditor extends PropertyEditorSupport {\r\n    private ObjectMapper objectMapper;\r\n    public ProductEditor(ObjectMapper objectMapper) {\r\n        this.objectMapper = objectMapper;\r\n    }\r\n    @Override\r\n    public void setAsText(String text) throws IllegalArgumentException {\r\n        if (StringUtils.isEmpty(text)) {\r\n            setValue(null);\r\n        } else {\r\n            Product prod = new Product();\r\n            try {\r\n                prod = objectMapper.readValue(text, Product.class);\r\n            } catch (JsonProcessingException e) {\r\n                throw new IllegalArgumentException(e);\r\n            }\r\n            setValue(prod);\r\n        }\r\n    }\r\n}<\/code><\/pre>\n<p data-id=\"overview\">Next, let&#8217;s bind the JSON parameter to an object of <em>Product<\/em> class:<\/p>\n<pre><code class=\"language-java\">@GetMapping(\"\/get2\")\r\n@ResponseBody\r\npublic Product get2Product(@RequestParam Product product) {\r\n    \/\/ custom logic\r\n    return product;\r\n}<\/code><\/pre>\n<p data-id=\"overview\">Lastly, we need to add the last missing piece of the puzzle. Let&#8217;s <strong>register <em>ProductEditor<\/em> in our Spring controller<\/strong>:<\/p>\n<pre><code class=\"language-java\">@InitBinder\r\npublic void initBinder(WebDataBinder binder) {\r\n    binder.registerCustomEditor(Product.class, new ProductEditor(objectMapper));\r\n}<\/code><\/pre>\n<p>Bear in mind that <strong>we need to URL-encode the JSON parameter to ensure safe transport<\/strong>.<\/p>\n<p>So, instead of:<\/p>\n<pre><code class=\"language-bash\">GET \/spring-mvc-basics-4\/products\/get2?product={\"id\": 1,\"name\": \"Asus Zenbook\",\"price\": 800}<\/code><\/pre>\n<p>We need to send:<\/p>\n<pre><code class=\"language-bash\">GET \/spring-mvc-basics-4\/products\/get2?product=%7B%22id%22%3A%201%2C%22name%22%3A%20%22Asus%20Zenbook%22%2C%22price%22%3A%20800%7D<\/code><\/pre>\n<h2 data- data-id=\"overview-1\">5. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"overview-1\"><\/div>\n<p>To sum it up, we saw how to work with JSON in Spring MVC. Along the way, we showcased how to send JSON parameters in POST and GET requests.<\/p>\n<p>As always, the full source code of the examples is available <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/spring-mvc-basics-4\">over on GitHub<\/a>.<\/p>\n<p>The post <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/spring-mvc-send-json-parameters\/\" >JSON Parameters with Spring MVC<\/a> first appeared on <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/\" >Baeldung<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/635761922\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Share on Google+\" href=\"https:\/\/feeds.feedblitz.com\/_\/30\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/googleplus20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/635761922\/baeldung,\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/spring-mvc-send-json-parameters#respond\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/spring-mvc-send-json-parameters\/feed\/\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&#160;<\/div>\n\n<p class=\"syndicated-attribution\"><figure class= \\\"wp-block-image alignnone \\\"><img src= \\\"http:\/\/itteacheritfreelance.hk\/test\/wordpress\/wp-content\/uploads\/2016\/05\/logo2-2.png\\\" alt=\\\"IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\\\"\/><figcaption>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427!<\/figcaption><\/figure>\r\n<\/br>Find A Teacher Form:\r\n<\/br>https:\/\/docs.google.com\/forms\/d\/1vREBnX5n262umf4wU5U2pyTwvk9O-JrAgblA-wH9GFQ\/viewform?edit_requested=true#responses\r\n<\/br><\/br>Email:\r\n<\/br>public1989two@gmail.com<br><br><br><br><br><br><br>\r\n<a href=www.itsec.hk style=color:#FFFFFF;>www.itsec.hk<\/a><br>\r\n<a href=\\\"www.itsec.vip\\\" style=color:#FFFFFF;>www.itsec.vip<\/a><br>\r\n<a href=\\\"www.itseceu.uk\\\" style=color:#FFFFFF;>www.itseceu.uk<\/a><br><\/p>","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Learn how to send JSON parameters in GET and POST requests when using Spring MVC.<\/p>\n<p>The post <a rel=\"NOFOLLOW noopener noreferrer\" href=\"https:\/\/feeds.feedblitz.com\/~\/635761922\/0\/baeldung~JSON-Parameters-with-Spring-MVC\/\" target=\"_blank\">JSON Parameters with Spring MVC<\/a> first appeared on <a rel=\"NOFOLLOW noopener noreferrer\" href=\"https:\/\/www.baeldung.com\/\" target=\"_blank\">Baeldung<\/a>.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>&nbsp;<a title=\"Share on Google+\" href=\"https:\/\/feeds.feedblitz.com\/_\/30\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/googleplus20.png\"><\/a>&nbsp;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/635761922\/baeldung,\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>&nbsp;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\"><\/a>&nbsp;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>&nbsp;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/635761922\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>&nbsp;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/spring-mvc-send-json-parameters#respond\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&nbsp;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/spring-mvc-send-json-parameters\/feed\/\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&nbsp;<\/div>\n<\/div>","protected":false},"author":792,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"slim_seo":{"title":"JSON Parameters with Spring MVC - ITTeacherITFreelance.hk","description":"Learn how to send JSON parameters in GET and POST requests when using Spring MVC. The post JSON Parameters with Spring MVC first appeared on Baeldung . &nbsp; &"},"footnotes":""},"categories":[6],"tags":[5358],"_links":{"self":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/78579"}],"collection":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/792"}],"replies":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=78579"}],"version-history":[{"count":7,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/78579\/revisions"}],"predecessor-version":[{"id":81747,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/78579\/revisions\/81747"}],"wp:attachment":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=78579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=78579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=78579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}