inflearn logo
강의

Course

Instructor

Spring-based REST API development

Event Repository

java.lang.AssertionError: Status

528

lasttokens55853591

33 asked

0

안녕하세요 기선님의 강의를 보면서 스프링부트 3.x버전때로
하고있는데 에러 발생되어서 문의드립니다..
답글에 소스코드 올렸습니다..
첫번째는 메이븐에서
<version>2.3.1</version> 을 입력 하는 경우
해당 지원 라이브러리가 지원이 안되는 경우가
발생하는데 왜그러는걸까요?..

두번째는 예제보고 따라하는데..
아래와 같은 오류가 발생합니다..
이건 왜그러는것일까요??

<오류>
MockHttpServletRequest:

HTTP Method = POST

Request URI = /api/events/

Parameters = {}

Headers = [Content-Type:"application/json;charset=UTF-8", Accept:"application/hal+json", Content-Length:"403"]

Body = {"id":10,"offline":false,"free":false,"eventStatus":null,"name":"Spring","description":"REST API Development with Spring","beginEnrollmentDateTime":"2018-11-23T14:21:00","closeEnrollmentDateTime":"2018-11-24T14:21:00","beginEventDateTime":"2018-11-25T14:21:00","endEventDateTime":"2018-11-26T14:21:00","location":"강남역 D2 스타텁 팩토리","basePrice":100,"maxPrice":200,"limitOfEnrollment":100}

Session Attrs = {}

Handler:

Type = org.springframework.web.servlet.resource.ResourceHttpRequestHandler

Async:

Async started = false

Async result = null

Resolved Exception:

Type = org.springframework.web.servlet.resource.NoResourceFoundException

ModelAndView:

View name = null

View = null

Model = null

FlashMap:

Attributes = null

MockHttpServletResponse:

Status = 404

Error message = No static resource api/events.

Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"]

Content type = null

Body =

Forwarded URL = null

Redirected URL = null

Cookies = []

MockHttpServletRequest:

HTTP Method = POST

Request URI = /api/events/

Parameters = {}

Headers = [Content-Type:"application/json;charset=UTF-8", Accept:"application/hal+json", Content-Length:"403"]

Body = {"id":10,"offline":false,"free":false,"eventStatus":null,"name":"Spring","description":"REST API Development with Spring","beginEnrollmentDateTime":"2018-11-23T14:21:00","closeEnrollmentDateTime":"2018-11-24T14:21:00","beginEventDateTime":"2018-11-25T14:21:00","endEventDateTime":"2018-11-26T14:21:00","location":"강남역 D2 스타텁 팩토리","basePrice":100,"maxPrice":200,"limitOfEnrollment":100}

Session Attrs = {}

Handler:

Type = org.springframework.web.servlet.resource.ResourceHttpRequestHandler

Async:

Async started = false

Async result = null

Resolved Exception:

Type = org.springframework.web.servlet.resource.NoResourceFoundException

ModelAndView:

View name = null

View = null

Model = null

FlashMap:

Attributes = null

MockHttpServletResponse:

Status = 404

Error message = No static resource api/events.

Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"]

Content type = null

Body =

Forwarded URL = null

Redirected URL = null

Cookies = []

java.lang.AssertionError: Status

Expected :201

Actual :404

<Click to see difference>

at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:59)

at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:122)

at org.springframework.test.web.servlet.result.StatusResultMatchers.lambda$matcher$9(StatusResultMatchers.java:637)

at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:214)

at com.example.wrpi.global.events.EventControllerTest.createEvent(EventControllerTest.java:59)

at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)

at java.base/java.lang.reflect.Method.invoke(Method.java:578)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:76)

at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)

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:366)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)

at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)

at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)

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$3.evaluate(ParentRunner.java:306)

at org.junit.runners.ParentRunner.run(ParentRunner.java:413)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)

at org.junit.runner.JUnitCore.run(JUnitCore.java:137)

at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)

at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)

at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)

at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)

at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)

at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)

Process finished with exit code -1

java spring rest-api

Answer 2

0

lasttokens55853591

해결했습니다 / 이 였습니다.
어제 이시간에 시작을해서 잠을 자지 못했습니다.
집 근처 헌책방에가서 maven 관련된 도서 있으면 봐야겠다는

생각이들었고..
Test코드에 대해 다시한번 생각해보게되었습니다.
감사합니다.

uri경로에 ' / ' 있냐 없냐 의 차이에 대해 공부하게 되었습니다.

기선님 강의 오래전에 구매하고 공부해야지 하고 미루고있었는데

지금까지 코딩했던 코드들을 보면서 3.x버전때 새로 만드는데
반성하는 계기가 되었습니다.

잘지내시는지 건강하시는지 모르지만..

많은것 배우고 싶습니다.

0

lasttokens55853591


<<Test코드>>

package com.example.wrpi.global.events;

import
com.example.wrpi.domain.entity.Event;
import
com.example.wrpi.domain.repository.EventRepository;
import
com.fasterxml.jackson.databind.ObjectMapper;
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.autoconfigure.web.servlet.WebMvcTest;
import
org.springframework.boot.test.mock.mockito.MockBean;
import
org.springframework.hateoas.MediaTypes;
import
org.springframework.http.MediaType;
import
org.springframework.test.context.junit4.SpringRunner;
import
org.springframework.test.web.servlet.MockMvc;

import
java.time.LocalDateTime;

import static
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static
org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static
org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static
org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
@RunWith(SpringRunner.class)
@WebMvcTest
public class EventControllerTest {

@Autowired
MockMvc mockMvc;

@Autowired
ObjectMapper objectMapper;

@MockBean
EventRepository eventRepository;

@Test
public void createEvent()throws Exception{

Event event = Event.builder()
.name("Spring")
.description("REST API Development with Spring")
.beginEnrollmentDateTime(LocalDateTime.of(2018, 11, 23, 14, 21))
.closeEnrollmentDateTime(LocalDateTime.of(2018, 11, 24, 14, 21))
.beginEventDateTime(LocalDateTime.of(2018, 11, 25, 14, 21))
.endEventDateTime(LocalDateTime.of(2018, 11, 26, 14, 21))
.basePrice(100)
.maxPrice(200)
.limitOfEnrollment(100)
.location("강남역 D2 스타텁 팩토리")
.build();
event.setId(10);
Mockito.when(eventRepository.save(event)).thenReturn(event);

mockMvc.perform(post("/api/events/")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaTypes.HAL_JSON)
.content(objectMapper.writeValueAsString(event)))
.andDo(print())
.andExpect(status().isCreated())
.andExpect(jsonPath("id").exists());


}

}


<<Controller>>

package com.example.wrpi.domain.controller;

import
com.example.wrpi.domain.entity.Event;
import
com.example.wrpi.domain.repository.EventRepository;
import
org.springframework.hateoas.MediaTypes;
import
org.springframework.http.MediaType;
import
org.springframework.http.ResponseEntity;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.PostMapping;
import
org.springframework.web.bind.annotation.RequestBody;
import
org.springframework.web.bind.annotation.RequestMapping;

im
port 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;

public
EventController(EventRepository eventRepository){
this.eventRepository = eventRepository;
}
@PostMapping("/api/events")
public ResponseEntity createEvent(@RequestBody Event event){
Event newEvent
= this.eventRepository.save(event);
URI createdUri = linkTo(EventController.class).slash(newEvent.getId()).toUri();
return
ResponseEntity.created(createdUri).body(event);
}
}




<<maven>>

<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>
4.0.0</modelVersion>
<parent>
<groupId>
org.springframework.boot</groupId>
<artifactId>
spring-boot-starter-parent</artifactId>
<version>
3.3.2</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>
com.example</groupId>
<artifactId>
wrpi</artifactId>
<version>
0.0.1-SNAPSHOT</version>
<packaging>
jar</packaging>
<name>
white_rpi</name>
<description>
white_rpi</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm
>
<properties>
<proje
ct.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>
UTF-8</project.reporting.outputEncoding>
<java.version>
19</java.version>
</properties>
<dependencies>
<dependency>
<groupId>
org.springframework.boot</groupId>
<artifactId>
spring-boot-starter</artifactId>
</dependency>

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

<dependency>
<groupId>
org.springframework.boot</groupId>
<artifactId>
spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot</groupId>
<artifactId>
spring-boot-starter-hateoas</artifactId>
</dependency>

<dependency>
<groupId>
org.springframework.boot</groupId>
<artifactId>
spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>
org.postgresql</groupId>
<artifactId>
postgresql</artifactId>
</dependency>
<dependency>
<groupId>
org.projectlombok</groupId>
<artifactId>
lombok</artifactId>
<optional>
true</optional>
</dependency>

<dependency>
<groupId>
org.modelmapper</groupId>
<artifactId>
modelmapper</artifactId>
<version>2.3.1</version>
<
/dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.security.oauth.boot</groupId>-->
<!-- <artifactId>spring-security-oauth2-autoconfigure</artifactId>-->
<!-- <version>2.1.0.RELEASE</version>-->
<!-- </dependency>-->
<dependency>
<groupId>
org.springframework.boot</groupId>
<artifactId>
spring-boot-configuration-processor</artifactId>
<optional>
true</optional>
</dependency>

<dependency>
<groupId>
com.h2database</groupId>
<artifactId>
h2</artifactId>
<version>
2.3.230</version>
<!-- <scope>test</scope>-->
</dependency>


<dependency>
<groupId>
pl.pragmatists</groupId>
<artifactId>
JUnitParams</artifactId>
<version>
1.1.1</version
>
<scope>
test</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.security</groupId>-->
<!-- <artifactId>spring-security-test</artifactId>-->
<!-- <version>${spring-security.version}</version>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->

<dependency>
<groupId>
org.springframework.restdocs</groupId>
<artifactId>
spring-restdocs-mockmvc</artifactId>
<!-- <version>3.0.1</version>-->
<!-- <scope>test</scope>-->
</dependency>

<dependency>
<groupId>
org.springframework.restdocs</groupId>
<artifactId>
spring-restdocs-asciidoctor</artifactId>
<!-- <version>3.0.1</version>-->
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot</groupId>
<artifactId>
spring-boot-maven-plugin</artifactId>
</plugin>

<plugin>
<groupId>
org.asciidoctor</groupId>
<artifactId>
asciidoctor-maven-plugin</artifactId>
<version>
2.2.1</version>
<executions>
<execution>
<id>
generate-docs</id>
<phase>
prepare-package</phase>
<goals>
<goal>
process-asciidoc</goal>
</goals>
<configuration>
<backend>
html</backend>
<doctype>
book</doctype>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<artifactId>
maven-resources-plugin</artifactId>
<version>
3.3.1</version>
<executions
>
<execution
>
<id>
copy-resources</id>
<phase>
prepare-package</phase>
<goals>
<goal>
copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.outputDirectory}/static/docs
</outputDirectory>
<resources>
<resource>
<directory>
${project.build.directory}/generated-docs
</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<groupId>
org.apache.maven.plugins</groupId>
<artifactId>
maven-surefire-plugin</artifactId>
<version>
3.2.1</version>
<configuration>
<argLine>
-Xshare:off</argLine>
<parallel>
all</parallel>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins</groupId>
<artifactId>
maven-failsafe-plugin</artifactId>
<version>
3.2.1</version>
<configuration>
<argLine>
-Xshare:off</argLine>
</configuration>
<executions>
<execution>
<goals>
<goal>
integration-test</goal>
<goal>
verify</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>
org.apache.maven.plugins</groupId>
<artifactId>
maven-compiler-plugin</artifactId>
<version>
3.11.0</version>
<configuration>
<source>
19</source>
<target>
19</target>
</configuration>
</plugin>

</plugins>
</build>

</project>



Spring 시큐리티 관련해서 WebSecurityConfigurationAdapter

0

71

1

junit5 사용하시는 분들

0

85

1

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

0

233

2

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

0

241

1

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

0

188

1

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

0

284

1

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

0

737

1

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

0

474

1

연동 DB문의

0

356

1

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

0

503

1

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

0

378

0

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

0

620

1

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

0

510

1

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

-1

390

1

psql 적용 후 에러

0

816

2

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

0

760

2

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

0

272

1

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

1

472

1

asciidoc 추가 스니펫 에러 해결법

0

396

1

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

0

420

3

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

0

328

1

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

0

329

1

부트 + jupiter 인 경우 설정법

0

340

1

혹여 기선님 말 안 듣고 gradle로 프로젝트 생성했다가 피똥싸고 계신 분들을 위하여

2

386

1