This is my controller:
@RequestMapping(value = "/followers", method = RequestMethod.POST, consumes = "application/json" , produces = "application/json") @ResponseBody public Follower create(@RequestBody Follower follower, HttpServletResponse response) { Follower savedFollower = service.create(follower); response.setStatus(201); //Created return savedfollower; } And this is my test:
@Test public void post_should_create_new_follower() throws Exception { Follower follower = new FollowerDummyBuilder().build(); ObjectMapper objectMapper = new ObjectMapper(); String asJson = objectMapper.writeValueAsString(follower); assertEquals(0l, JPATestUtils.countEntity(em, Follower.class)); this.mockMvc.perform(MockMvcRequestBuilders.post("/followers"). accept(MediaType.APPLICATION_JSON). contentType(MediaType.APPLICATION_JSON).content(asJson)).andExpect((MockMvcResultMatchers.status().isCreated())); assertEquals(1l, JPATestUtils.countEntity(em, Follower.class)); } But I'm always getting 400 Bad Request and I'm not able to figure out why...
Anyone have a hint? Update Adding class Follower
@Entity public class Follower extends AbstractEntity { @OneToOne(cascade = CascadeType.ALL) @NotNull private Credentials Credentials; @NotNull @OneToOne(cascade = CascadeType.ALL) private UserRetrievalStrategy userRetrievalStrategy; @NotNull @OneToOne(cascade = CascadeType.ALL) private SearchEngineFilter searchEngineFilter; @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JsonIgnore private IgnoreList ignoreList = new IgnoreList(); @Enumerated(EnumType.STRING) @NotNull private FollowerStatus status; protected Follower() { } public Follower(Credentials credentials, UserRetrievalStrategy userRetrievalStrategy, SearchEngineFilter searchEngineFilter) { this.credentials = credentials; this.userRetrievalStrategy = userRetrievalStrategy; this.searchEngineFilter = searchEngineFilter; this.status = FollowerStatus.STOPED; } public Credentials getCredentials() { return credentials; } public void addUserToIgnoreList(User user) { this.ignoreList.add(user); } public IgnoreList getIgnoreList() { return ignoreList; } public UserRetrievalStrategy getUserRetrievalStrategy() { return userRetrievalStrategy; } public SearchEngineFilter getSearchEngineFilter() { return searchEngineFilter; } public void setSearchEngineFilter(SearchEngineFilter searchEngineFilter) { this.searchEngineFilter = searchEngineFilter; } public Iterator<User> getIgnoreListIterator() { return ignoreList.iterator(); } public void clearIgnoreList() { this.ignoreList.clearList(); this.ignoreList = new IgnoreList(); } public void setStaus(AutofollowerStatus status) { this.status = status; } public AutofollowerStatus getStatus() { return status; } }
Followerclass?asJsonand posting it manually to your REST endpoint via a client utility just to make sure the mock framework abstraction isn't interfering? Also, does your endpoint do any special validation onFollowerand manually throw a 400 if it fails?