Software Backend/Java & Spring

    Spring Request 데이터를 List 형태로 받으면 @Valid 체크가 안되는 현상 해결 방법

    Spring Request 데이터를 List 형태로 받으면 @Valid 체크가 안되는 현상 해결 방법

    Spring does not check valid when list data is databinding 다음과 같은 예시가 있습니다. 스프링에서 Controller 로 데이터가 넘어올 때 [java.util.List] 형태의 데이터만 넘어와서 해당 List에 맞게 DTO를 만들어서 List로 데이터를 받는데, List 안의 데이터에 대해서 분명히 조건 체크를 하게 했는데 Null로 데이터가 넘어온 데이터로 작업하게 되어 에러가 발생한다 ????? 위 문제로 인해 저도 여러 해결 방법을 찾아봤는데요 특히, "Custom Validator를 만들어서 체크하면 된다" 하는 글이 대부분이었습니다. 위 Custom Validator가 아닌 방법으로 좀 더 손쉽게 해결 가능하도록 해봅시다. 우선 이유부터 알아봅시다..

    협업을 위한 snake_case -> camelCase 변환 방법 @JsonNaming, @JsonProperty

    협업을 위한 snake_case -> camelCase 변환 방법 @JsonNaming, @JsonProperty

    협업 도중 발생한 문제로 시도한 JsonNaming과 JsonProperty 문제가 발생한 이유는 다음과 같다. Front-End에서는 이미 많은 부분을 snake_case를 사용하고 있었기에 변경소요가 너무 커서 계속해서 snake_case를 사용하기 원했다. Back-End 개발자인 나는 Java 작성 규칙에 따라 camelCase로 작성하길 원했다. 그렇기 때문에 Front-End에서는 snake_case로 데이터를 보냈고, snake_case로 데이터를 받았다. 두 가지의 요구사항을 만족하기 위해 어떻게 해결할까? 생각을 하며 여러가지 방법을 시도해 보았는데, 결과물은 같지만 불필요한 코드가 많이 발생하게 되는 과정이 많이 생겼다. 이러한 문제해결 도중 @JsonNaming과 @JsonProper..

    객체 지향, 오브젝트와 의존 관계의 이해

    Connection을 통한 오브젝트와 의존관계의 이해 public class UserDao { public void add(User user) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.cj.jdbc.Driver"); Connection c = DriverManager.getConnection( "jdbc:mysql://localhost/springbook","spring","book"); PreparedStatement ps = c.prepareStatement( "insert into users(id, name, password) values(?, ?, ?)"); ps.setString(1, user.getId());..

    에러, java.lang.IllegalStateException: stream has already been operated upon or closed

    에러, java.lang.IllegalStateException: stream has already been operated upon or closed

    문제 스트림으로 백준 알고리즘 연습 도중 발생, 코드는 다음과 같다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.OptionalInt; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(..

    API 명세서 뜯어보기 - StringTokenizer Class

    Package java.lang.Object java.util.StringTokenizer What is StringTokenizer The string tokenizer class allows an application to break a string into tokens. The tokenization method is much simpler than the one used by the StreamTokenizer class. The StringTokenizer methods do not distinguish among identifiers, numbers, and quoted strings, nor do they recognize and skip comments. 문자열 토크나이저 클래스를 사용하면..

    API 명세서 뜯어보기 - Functional interface

    Package java.util.function What is Functional Interface? This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference. 이것은 함수 인터페이스이므로 람다 식 또는 메소드 참조에 대한 할당 대상으로 사용할 수 있습니다. Functional Interfaces Function Predicate Consumer Supplier BiConsumer BinaryOperator etc ... Function T - the type of the input to the function ( 함수의 매개변수 값의 타..

    API 명세서 뜯어보기 - StringBuilder && StringBuffer Class

    Package java.lang.Object java.lang.StringBuilder java.lang.StringBuffer StringBuilder 란? A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in replacement for StringBuffer in places where the string buffer was being used by a single thread (as is generally the case). Where p..

    API 명세서 뜯어보기 - String Class

    Package java.lang.Object java.lang.String String이란? *String은 프로그램 작성시 가장 기본이 되며 가장 많이 사용하는 클래스다. The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instances of this class. String Class는 문자열(char)을 대표한다. 모든 자바 프로그램의 문자열 리터럴은, 이 클래스의 인스턴스로 "abc"와 같이 구현된다. ex) String a = "Example"; 상수 : 변하지 않는 변수 == 위 예시의 a 의미 리터럴 : 변하지 않는 데이터 == ..