title: Testing Spring Boot REST json result
body: <p>I have some problem with checking json result </p>
  
  <p>UserControllerTest class</p>
  
  <pre><code>package com.serwis.controller;
  
  import com.serwis.PraktykiApplication;
  import com.serwis.model.User;
  import com.serwis.repository.UserRepository;
  import org.hamcrest.Matchers;
  import org.junit.Before;
  import org.junit.Test;
  import org.junit.runner.RunWith;
  import org.mockito.Mockito;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.boot.test.SpringApplicationConfiguration;
  import org.springframework.boot.test.TestRestTemplate;
  import org.springframework.boot.test.WebIntegrationTest;
  import org.springframework.http.HttpStatus;
  import org.springframework.http.MediaType;
  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  import org.springframework.test.web.servlet.MockMvc;
  import org.springframework.web.client.RestTemplate;
  
  import static org.hamcrest.Matchers.is;
  import static org.junit.Assert.*;
  import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
  import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
  import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
  import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
  import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
  
  
  
  @RunWith(SpringJUnit4ClassRunner.class)
  @SpringApplicationConfiguration(PraktykiApplication.class)
  @WebIntegrationTest
  public class UserControllerTests {
  
      @Autowired
      private UserRepository userRepository;
  
      User user;
  
      private MockMvc mockMvc;
  
      @Before
      public void setUp(){
          user = new User("login1","password","email");
          userRepository.deleteAll();
          userRepository.save(user);
  
          this.mockMvc = standaloneSetup(new UserController()).build();
      }
  
      @Test
      public void createUser() throws Exception {
          this.mockMvc.perform(get("/user/findall/").accept(MediaType.parseMediaType("application/json;charset=UTF-8")))
                  .andExpect(status().isOk())
                  .andExpect(content().contentType("application/json;charset=UTF-8"))
                  .andExpect(jsonPath("$.login", is("login1")));
          System.out.println(userRepository.findAll());
      }
  
  
  
  }
  </code></pre>
  
  <p>User class</p>
  
  <pre><code>package com.serwis.model;
  
  
  import javax.persistence.*;
  
  import java.util.Arrays;
  import java.util.Set;
  
  
  @Entity
  @Table(name="User")
  public class User {
  
      @Id
      @GeneratedValue(strategy= GenerationType.AUTO)
      @Column(name="id")
      private long id;
  
      @Column(name="login")
      private String login;
  
      @Column(name="password")
      private String password;
  
      @Column(name="email")
      private String email;
  
      @Column(name="avatar")
      private byte[] avatar;
  
  
      public User(){}
  
      public User(String login, String password, String email) {
          this.login = login;
          this.password = password;
          this.email = email;
      }
  
      @Override
      public String toString() {
          return "User{" +
                  "id=" + id +
                  ", login='" + login + '\'' +
                  ", password='" + password + '\'' +
                  ", email='" + email + '\'' +
                  ", avatar=" + Arrays.toString(avatar) +
                  '}';
      }
  
      public long getId() {
          return id;
      }
  
      public void setId(int id) {
          this.id = id;
      }
  
      public String getLogin() {
          return login;
      }
  
      public void setLogin(String login) {
          this.login = login;
      }
  
      public String getPassword() {
          return password;
      }
  
      public void setPassword(String password) {
          this.password = password;
      }
  
      public String getEmail() {
          return email;
      }
  
      public void setEmail(String email) {
          this.email = email;
      }
  
      public byte[] getAvatar() {
          return avatar;
      }
  
      public void setAvatar(byte[] avatar) {
          this.avatar = avatar;
      }
  
  
  }
  </code></pre>
  
  <p>UserRepository class</p>
  
  <pre><code>package com.serwis.repository;
  
  import com.serwis.model.User;
  import org.springframework.data.repository.CrudRepository;
  import org.springframework.transaction.annotation.Transactional;
  
  
  @Transactional
  public interface UserRepository extends CrudRepository&lt;User, Long&gt;{
  }
  </code></pre>
  
  <p>userController class</p>
  
  <pre><code>package com.serwis.controller;
  
  import com.serwis.model.User;
  import com.serwis.repository.UserRepository;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.ResponseBody;
  
  /**
   * Created by Jodanpotasu on 2016-07-24.
   */
  @Controller
  public class UserController {
  
      @Autowired
      private UserRepository userRepository;
  
  
      @RequestMapping("/user/create")
      @ResponseBody
      public String create(String email, String login, String password) {
          String userId = "";
          try {
              User user = new User(email, login, password);
              userRepository.save(user);
              userId = String.valueOf(user.getId());
          } catch (Exception ex) {
              return "Error creating the user: " + ex.toString();
          }
          return "User succesfully created with id = " + userId;
      }
  
      @RequestMapping("/user/findall/")
      @ResponseBody
      public Iterable&lt;User&gt; findAll() {
          return userRepository.findAll();
      }
  
      @RequestMapping("/user/delete")
      @ResponseBody
      public String delete(long id) {
          User deleted = userRepository.findOne(id);
          userRepository.delete(id);
          return "USER DELETED: " + deleted;
      }
  
      @RequestMapping("/user/update")
      @ResponseBody
      public String update(long id, String login, String password, String email) {
          User beforeUpdate = userRepository.findOne(id);
  
          User afterUpdate = userRepository.findOne(id);
          afterUpdate.setLogin(login);
          afterUpdate.setEmail(email);
          afterUpdate.setPassword(password);
          return "BEFORE UPDATE: \n" + beforeUpdate + " &lt;br&gt; AFTER UPDATE: " + afterUpdate;
      }
  }
  </code></pre>
  
  <p>it should be like</p>
  
  <blockquote>
    <p>[{"id":1,"login":"login1","password":"password","email":"email","avatar":null}]</p>
  </blockquote>
  
  <p>But i still have error output</p>
  
  <pre><code>org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
  </code></pre>
  
  <p>and that is full output</p>
  
  <pre><code>org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
  
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:979)
      at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
      at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
      at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:65)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
      at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167)
      at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134)
      at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:155)
      at com.serwis.controller.UserControllerTests.createUser(UserControllerTests.java:56)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
      at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
      at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
      at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
      at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
      at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
      at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
      at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
      at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:254)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
      at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
      at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
      at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
      at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
      at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:253)
      at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
  Caused by: java.lang.NullPointerException
      at com.serwis.controller.UserController.findAll(UserController.java:37)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
      at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
      at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832)
      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743)
      at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
      ... 43 more
  </code></pre>
  
  <p>Spring boot version: 1.3.6 is there another better way to test json?</p>