목록프로그래밍 (408)
쌓고 쌓다
Board 엔티티는 다음과 같은 모습이다. public class Board { ... private String title; private String content; @JsonIgnore private Integer category; } 다음의 POST 요청을 보내고. {"title" : "이런", "content" : "아아악", "category" : 0} @RequestBody로 받아 객체로 변환하길 원했다. public String addBoard(@RequestBody Board board) { ... } 그러나 실제 들어간 데이터에 title과 content는 매핑이 되었지만 category에는 NULL이 들어가있다. @JsonIgnore를 객체에서 JSON으로 변환하는 직렬화 과정에서 무..
다음과 같은 JSON을 받았다. { "status": "success", "data": { "id": 11, "name": "name!", "title": "title!", "content": "content!", "regDate": "2023-11-20T14:04:14" }, "message": "성공했다." } 다음과 같은 클래스로 파싱을 시도했더니.. public class InquiryListResponse { private String status; private List data; private String message; } Expected BEGIN_ARRAY but was BEGIN_OBJECT !!!!! ARRAY를 예측했더니 OBJECT가 나왔다는 이야기다. 그렇다! 내가 data에 ..
REST API 응답을 만들며 아래의 코드를 봤다. public class ApiResponse { private T data; public T getData() { return data; } public void setData(T data) { this.data = data; } } T가 뭐야.. 자바에서 제네릭은 데이터 형식에 의존 받지 않고 여러 데이터를 가질 수 있도록 지원하는 방법이다. ArrayList와 같이 ArrayList l = new ArrayList(); 와 같이 생성하고 썼다. 이게 제네릭이였다. 그럼 궁금한게 생긴다. Object를 쓰고말지 왜 제네릭을 쓸까?? 아래의 코드를 보자. List list = new ArrayList(); list.add(“hello”); String ..
임의로 생성한 테이블은 다음과 같다. CREATE TABLE inquiry ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), title VARCHAR(255), content VARCHAR(255), reg_date DATETIME DEFAULT NOW() ) 앞전에 게시판 만들때는 서버(자바)에서 현재 시간을 MVC패턴의 서비스단에서 다음의 코드로 갱신을 시켜줬었다. poster.setRegdate(LocalDateTime.now()); 이번에는 reg_date 컬럼의 값은 DEFAULT로 DB에서 현재 시간을 넣어주는 방식을 생각했다. 아래의 JSON 데이터를 전송하여 서버에서 JPA를 사용하여 저장할 것이다. {"title": "title!",..
노출되면 안되는 값을 local.properties에 저장하고 사용하고 싶다. 그럼 다음과 같이 사용하자. local.properties serverAddress = "10.0.2.2" 먼저 local.properties에 Key와 Value로 작성해주자. 이제 build.gradle.kts에 다음과 같은 내용들을 추가해줘야한다. import java.io.FileInputStream import java.util.Properties; var properties = Properties() properties.load(FileInputStream("local.properties")) properties를 사용하기 위한 과정이다. android { defaultConfig { ... // 읽기 과정 - Bu..
앱과 통신을 위한 REST API 서버를 만드는중이다.! UPDATE를 수행하는 메서드를 만들었다. 다음과 같다. @Service public class UserService { ... public User updateUser(Long id, User userInfo) { User user = userRepository.findById(id).get(); // Optional 수정 필요 String name = userInfo.getName(); int age = userInfo.getAge(); user.setName(name); user.setAge(age); return user; } } 아니!! find는 쿼리가 잘 날라가는데 아래의 엔티티 변경시 UPDATE 쿼리가 안날라간다. 문제는 트랜잭션내..
비회원이 댓글 작성을 누르면 어떻게 에러 메시지를 띄울까 방법을 생각했다. 인터셉터로 처리하고싶었지만 댓글 작성은 AJAX로 이뤄진다. 먼저 서버에서 세션을 통해 비회원을 판별한다. @PostMapping(value = "/comment/write", consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity commentWrite(@SessionAttribute(name= SessionConst.LOGIN_MEMBER, required = false) Member member, @RequestBody Comment comment) { Map m = new HashMap(); if(member==null) { m.put..
서블릿은 2가지 방식으로 예외 처리를한다. Exception(예외) response.sendError(HTTP 상태 코드, 오류 메시지) WAS 구조는 다음과 같이 볼 수 있다. 디스패처 서블릿이 서블릿 컨테이너와 스프링 컨테이너의 연결 짓는다. 1. Exception 자바 직접 실행 자바 메인 메서드를 실행하여 main이라는 이름의 쓰레드를 실행한다. 실행중 예외를 잡지 못해 Main 메서드를 넘어서 예외가 나오면 예외 정보가 나오고 쓰레드는 종료된다. 웹 애플리케이션 웹 애플리케이션에서는 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 동작한다. 애플리케이션에서 try catch로 예외를 잡지 못하고 서블릿 밖인 WAS까지 예외가 넘어오게 되며 예외 페이지를 보이게 된다. 예외 발생..