inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 기반 REST API 개발

왜 자꾸 201응답이 오는지 모르겠네요..

456

상현이

작성한 질문수 2

0

@Test
public void createEvent_Bad_Request_Empty_Input() throws Exception {
EventDto eventDto = EventDto.builder().build();


this.mockMvc.perform(post("/api/events/")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(this.objectMapper.writeValueAsString(eventDto)))
.andExpect(status().isBadRequest());

이 테스트를 진행 하려고하는데 자꾸 201 응답코드만 떨어집니다.
왜그런걸까요???
@valid 어노테이션 잘 설정한거같은데 1시간째 못찾고있습니다
 
 
package dlee.demorestapi.events;

import org.modelmapper.ModelMapper;
import org.modelmapper.internal.Errors;
import org.springframework.hateoas.MediaTypes;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.Valid;
import java.net.URI;

import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;

@Controller
@RequestMapping(value="/api/events",produces = MediaTypes.HAL_JSON_VALUE)
public class EventController {

private final EventRepository eventRepository;

private final ModelMapper modelMapper;

public EventController(EventRepository eventRepository,ModelMapper modelMapper){
this.eventRepository = eventRepository;
this.modelMapper = modelMapper;
}

@PostMapping
public ResponseEntity createEvent(@RequestBody @Valid EventDto eventDto, Errors errors){ //JSON을 객체로 변환하는거니까 deserializationerrors
System.out.println(errors.getMessages() + "asdsadasds");

if(errors.hasErrors()){
return ResponseEntity.badRequest().build();
}
Event event = modelMapper.map(eventDto,Event.class);
Event newEvent = this.eventRepository.save(event);
URI createdUri = linkTo(EventController.class).slash(newEvent.getId()).toUri();
return ResponseEntity.created(createdUri).body(event);
}
}













package dlee.demorestapi.events;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;

@Data @Builder @NoArgsConstructor @AllArgsConstructor

public class EventDto {
@NotEmpty
private String name;
@NotEmpty
private String description;

@NotNull
private LocalDateTime beginEnrollmentDateTime;
@NotNull
private LocalDateTime closeEnrollmentDateTime;
@NotNull
private LocalDateTime beginEventDateTime;
@NotNull
private LocalDateTime endEventDateTime;
private String location;
@Min(0)
private int basePrice;
@Min(0)
private int maxPrice;
@Min(0)
private int limitOfEnrollment;
}





spring rest-api java

답변 2

2

배성진

이미 해결 하셨을 수도 있지만 다른 분들을 위해 적어놓겠습니다.

 

먼저 @Vaild가 없어서 의존성을 추가했고,

<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>

 

위의 밤의멜로디님의 답변대로 해도 똑같이 201응답이 왔습니다.

 

인터넷에 찾아보니 org.hibernate.validator 추가하라는 내용이 있어서

<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>

추가하니 해결됬습니다.

참고한 글입니다

https://stackoverflow.com/questions/27886038/how-to-turn-on-annotation-driven-validation-in-spring-4/27903277#27903277

 

추가적으로

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

위에 2개 추가안하셔도 이거만 추가해도 됩니다

 

1

밤의멜로디

Errors객체를 잘못 받아 오셨네요.

org.springframework.validation.Errors를 import하셔야 합니다.

 

0

상현이

저걸로 import해도 똑같이 201 응답 떨어져요

0

백기선

밤의멜로디님이 말씀하신게 맞아요. import를 잘못하셨는데 흠.. 고쳐도 똑같다고 하시니 흥미롭네요.

해당 상황이 재현되는 코드를 깃헙에 올려서 공유해 주시면 살펴보겠습니다.

Spring 시큐리티 관련해서 WebSecurityConfigurationAdapter

0

74

1

junit5 사용하시는 분들

0

89

1

자바 빈 스펙을 준수하는지 체크하는 테스트

0

240

2

REST API 개발 중 비즈니스 로직 적용 부분의 JSON 에러

0

245

1

스프링 부트 3버전에서의 실습

0

192

1

java.lang.AssertionError: Status

0

532

2

spring doc 관련 파일 생성 관련 배포 관련 질문 드립니다.

0

288

1

섹션2 201응답받기 부분 테스트 404에러 질문입니다

0

742

1

강의 자료가 404입니다 확인 부탁 드려요!

0

477

1

연동 DB문의

0

361

1

이벤트 Repository강의 중 Event 클래스에 private Integer Id; 위치 질문

0

506

1

(Mac) postgressql 관련하여 port kill 해도 다시 살아나는 경우

0

380

0

maven으로 생성한 docs파일(index.html)에서의 not found 오류 질문

0

622

1

테스트 오류 질문드립니다.

0

512

1

docs 요청값이 반영이 안되네요... (해결)

-1

395

1

psql 적용 후 에러

0

820

2

mvn package 시 다음과 같은 에러가 나시면

0

767

2

Event에 Account manager를 추가했으면 문서화 필요

0

274

1

2년 훨씬 전 부터 Restlet-> Talend API 로 바뀌었습니다~

1

473

1

asciidoc 추가 스니펫 에러 해결법

0

400

1

_links 는 현재 fieldWithPath 를 해주지 않아도 됩니다.

0

424

3

깃랩 처음 사용자를 위한 index.adoc raw 보는 법

0

333

1

eclipse 쓰시는 분을 위한 maven-resources-plugin 팁

0

336

1

부트 + jupiter 인 경우 설정법

0

343

1