Servlet.service() for servlet [requestBodyJsonServlet] in context with path [] threw exception
이 에러는 requestBodyJsonServlet
서블릿이 예외를 던지는 경우 발생한다. 이는 서블릿이 요청을 처리하거나 서블릿에 정의된 서비스 메서드를 실행하는 중에 문제가 발생했음을 나타낸다.
원인은 여러 가지일 수 있지만, 가장 일반적인 원인은 서블릿 코드에 오류가 있거나, 요청이 불완전하거나 잘못된 경우이다.
package hello.servlet.basic.request;
import com.fasterxml.jackson.databind.ObjectMapper;
import hello.servlet.basic.HelloData;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.util.StreamUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletInputStream inputStream = req.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody : " + messageBody);
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
System.out.println("helloData.username =" + helloData.getUsername());
System.out.println("helloData.age =" + helloData.getAge());
resp.getWriter().write("ok");
}
}
ServletInputStream inputStream = req.getInputStream();
과 String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
에서 요청 본문을 제대로 읽어오지 못하는 경우HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
에서 JSON 문자열을 HelloData
객체로 변환하는 과정에서 문제가 발생.HelloData
클래스의 형식과 맞지 않는 경우resp.getWriter().write("ok");
에서 응답을 제대로 작성하지 못하는 경우.import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class HelloData {
private String username;
private int age;
}
JSON 문자열을 객체로 변환하는 과정에서 문제가 발생했다.
{"username:" "subeen", "age" : 25}
로 수정하였다.
JSON 형식을 지켜 데이터를 전송하자.
오타내지말자.