작업 상태

#springboot 버전 변경 후에 발생함

//id 'org.springframework.boot' version '3.0.2'
id 'org.springframework.boot' version '3.1.3'

 

에러 메시지 

expression.EvaluationException: Accessing member 'requestUri' is forbidden for type 'class org.springframework.web.servlet.support.RequestContext' in this expression context.

원인

문제부분

    <script th:inline="javascript">
        /*<![CDATA[*/

        //let loc = /*[[${#ctx.springRequestContext.requestUri}]]*/'';

 

#부트 버전 변경후 나머지 종속성으로 thymleaf버전도 3.1.3으로 변경되었는데 3.1에서는 제거된 방식이라고 함

 

 

처리

 

기존 방식

 

controller

    @GetMapping(value = "/admin/note.html")
    public String indexGetMethod(Model model) {
        return "admin/note";
    };

 

view

    <script th:inline="javascript">
        /*<![CDATA[*/

        //let loc = /*[[${#ctx.springRequestContext.requestUri}]]*/'';
 

 

 

변경후 > 자바쪽에서 현 위치를 파악후 전달해줌

 

controller

    @GetMapping(value = "/admin/note.html")
    public String indexGetMethod(Model model, HttpServletRequest request) {
        model.addAttribute("servletPath", request.getServletPath());
        return "admin/note";
    };

 

view

    <script th:inline="javascript">
        /*<![CDATA[*/

        //let loc = /*[[${servletPath}]]*/'';


참고

getRequestURI is null with Netty and Spring Boot 3 - Stack Overflow

작업 상태

- Jpa 를 이용하고 있었고, todo라는 클래스 체운후 insert 후 결과 값을 json응답으로 응답해주는 메소드 작업중이었습니다.

- 상황은 work:todo=1:N 관계에 있었습니다.

- 에러가 발생하면서 무언가 무한루프가 도는 듯한 느낌도 있었습니다.
 
에러 메시지 

- java.lang.IllegalStateException: getOutputStream() has already been called for this response at org.apache.catalina.connector.Response.getWriter(Response.java:561)  at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:226)

- 에러 메시지를 기반으로 상위 filter등을 살폈으나 특이사항은 없었습니다.

java.lang.IllegalStateException: getOutputStream()

원인

        at co m.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:733) 
        at co m.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) 
        at co m.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) 
        at co m.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:733) 
        at co m.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)

로그를 살피던 중 이 부분이 무한 루프가 도는 느낌이어서 검색해 보니.. json으로 변환시 Enitty참조문제로 무한 루프가 발생할수 있다고 해서 두개의 Entity Todi, Working을 살펴봤습니다.

 

@Entity
public class Todo {
...
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "working_id")
    private Working working;
}

@Entity
public class Working {
...

    @OneToMany(mappedBy = "working", cascade = CascadeType.ALL)
    @OrderBy("id DESC")
    private List<Todo> todos; 
}

검색 결과에서 발견한것 처럼 상호 참조가 있었습니다.

 


처리

@Entity
public class Working {
...

    @OneToMany(mappedBy = "working", cascade = CascadeType.ALL)
    @OrderBy("id DESC")
    @JsonIgnore  // 어노테이션을 사용하여 직렬화에서 제외시킴
    private List<Todo> todos; 
}

 

작업 상태

- tailwind로 css파일 생성중이었습니다. tailwind.config.js파일 생성후 

tailwindcss -i ./input.css -o ./man/man.css --watch 실행중에 나타났습니다.
 
에러 메시지 


원인

- “Unterminated string constant” 오류는 문자열의 닫는 따옴표를 빼먹거나, 문자열 내에서 이스케이프 문자를 제대로 처리하지 않거나, 문자열이 여러 줄로 나누어져 있을 때 발생합니다.  라고 bing 친구가 답해줬는습니다.

- 덕분에 expression.js파일을 살펴봤으나 원인은 찾지 못했습니다.

- 당연하게도 배포된 코드에서 문제를 찾기 보다는 만든 파일을 찾았어야했습니다.

- tailwind.config.js 부분입니다. tailwind에서 css 스캔할 대상 설정 부분인데 따옴표 가 빠져 있었습니다.

- 에러는 node_modues쪽에서 나왔네요.

 

처리

- 따옴표 추가 후 정상 동작합니다.

- 배포 코드를 의심하기 보단 나 자신을 먼저 의심합시다.OTL

 

작업 상태

- 페이징 작업 중에 발생핬습니다. ?page=1 형태의 요청이 와야할는데 null 인 경우가 있었습니다.
 
에러 메시지 

 WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'page' for method parameter type Integer is not present]

원인

- 기본값 처리가 미흡했습니다.

 

public Page<Note> viewAllGetMethod(Model model
,@PathVariable("categoryId") Long categoryId
,@RequestParam(value = "page") Integer page
) { 

처리

public Page<Note> viewAllGetMethod(Model model
,@PathVariable("categoryId") Long categoryId
,@RequestParam(defaultValue = "1", value = "page") Integer page
) { 

참고

- 이번 에러는 기본값 미흡도 있지만, client측 코드 요청 부분의 페이징 기능 업데이트 후 서버 재시작을 안한 상황에서 page값이 없이 들어와서 발생했습니다. 서버 코드 수정없이 client 재시작으로 해결됐으나, 대응 차원에서 서버도 수정했습니다.

+ Recent posts