반응형

failed to load api definition. swagger

 

계속 500 에러 뿜뿜 으아 

 

잘되던게 컨트롤러 하나 추가했는데 api-docs에서 정보를 못 불러오는거 같다..

 

중간메서드 오류 하나를 빼고 하니 잘됨

어노테이션을 하나씩 지우고 해도 오류..

 

삽질 삽질 으쌰 으..싸.. .

 

원인을 찾음

test ( MultipartFile file ,String name){ }

 

 MultipartFile file 을 swagger-ui 에서 지원을 안한다.

 

해당 영역을 

 

@Parameter(hidden=true)

test ( @Parameter(hidden=true) MultipartFile file ,String name){ }

 

하니 오류 없이 잘 나온다

 

오늘 삽질 끝

반응형
반응형
public class Node {

	// 맴버 변수 선언
    private Node left;
    private Node right;
    private Object data;

   //생성자
    public Node(Object data){
        this.data = data;
    }

    // 노드 왼쪽 자식노드와 연결해주는 메소드
    public void makeLeftSubTree(Node sub){
        if(this.left != null){
            this.left = null;
        }
        this.left = sub;
    }
    // 노드 오른쪽 자식 노드와 연결해주느 메소드
    public void makeRightSubTree(Node sub){
        if(this.right != null){
            this.right = null;
        }
        this.right = sub;
    }
    // 데이터 값
    public Object getData(){
        return this.data;
    }

    public Node getLeftSubTree(){
        return this.left;
    }

    public Node getRightSubTree(){
        return  this.right;
    }

	// 실행 테스트 
    public static void main(String[]args){
    	//node1 객체 data 1 생성
        Node node1 = new Node(1);
        //Node node2 = new Node(2);
        //node3 객체 3으로 생성
        Node node3 = new Node(3);
		//node4 객체 "데이타" 로 생성
        Node node4 = new Node("데이타");

		//노드1 왼쪽
        node1.makeLeftSubTree(node4);
        //노드2 오른쪽
        node1.makeRightSubTree(node3);

        System.out.println("노드1 데이터 " + node1.getData());
        System.out.println("노드1 left " + node1.getLeftSubTree());
        System.out.println("노드1 left value " + node1.getLeftSubTree().getData());
        System.out.println("노드1 right value " + node1.getRightSubTree().getData());
    }

}

실행 결과..

반응형
반응형

@PostConstruct 어노테이션 설정해놓은

init 메소드는 WAS가 올라갈때 실행된다. 


 

    @PostConstruct
    private void init() {
        log.info("@PostConstruct ------ WAS 올라갈때 실행");
    }

 

 

출처 https://javaslave.tistory.com/48

반응형
반응형

이클립스에서 분명 사용하는 bean  리스트를 본것 같은데.. 아무리 찾아도 안나옴..

 

그래서 로딩된  bean  목록 출력하는것 소스

 

    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    
    
    public class RestController {
        
    @Autowired
    private DefaultListableBeanFactory dfBean;
    
    
    @GetMapping("/webportalif/getbean")
    public void getBean () {
        for(String name : dfBean.getBeanDefinitionNames()) {
            log.info(" INFO BEAN NAME ===  "+name);
        }
    }
    
    }
    
    출력..
    
11:28:21.157 [http-nio-8080-exec-6] INFO   c.m.w.r.interceptor.WebInterceptor.preHandle 43  - Request URI:/webportalif/getbean, method:GET
11:28:21.158 [http-nio-8080-exec-6] INFO   c.m.w.rest.controller.RestController.getBean 42  -  INFO BEAN NAME ===  org.springframework.context.annotation.internalConfigurationAnnotationProcessor
11:28:21.158 [http-nio-8080-exec-6] INFO   c.m.w.rest.controller.RestController.getBean 42  -  INFO BEAN NAME ===  org.springframework.context.annotation.internalAutowiredAnnotationProcessor
11:28:21.158 [http-nio-8080-exec-6] INFO   c.m.w.rest.controller.RestController.getBean 42  -  INFO BEAN NAME ===  org.springframework.context.annotation.internalCommonAnnotationProcessor
11:28:21.158 [http-nio-8080-exec-6] INFO   c.m.w.rest.controller.RestController.getBean 42  -  INFO BEAN NAME ===  org.springframework.context.event.internalEventListenerProcessor
11:28:21.158 [http-nio-8080-exec-6] INFO   c.m.w.rest.controller.RestController.getBean 42  -  INFO BEAN NAME ===  org.springframework.context.event.internalEventListenerFactory
11:28:21.158 [http-nio-8080-exec-6] INFO   c.m.w.rest.controller.RestController.getBean 42  -  INFO BEAN NAME ===  restApplication
11:28:21.159 [http-nio-8080-exec-6] INFO   c.m.w.rest.controller.RestController.getBean 42  -  INFO BEAN NAME ===  org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory
11:28:21.159 [http-nio-8080-exec-6] INFO   c.m.w.rest.controller.RestController.getBean 42  -  INFO BEAN NAME ===  webServiceConfig
11:28:21.159 [http-nio-8080-exec-6] INFO   c.m.w.rest.controller.RestController.getBean 42  -  INFO BEAN NAME ===  restController

반응형
반응형

String 변수 ="1123 33111";

 

변수명.replaceAll("\\s", "")

String 변수 ="1123 33111";

변수명.replaceAll("\\s", "")

trim 이 왜?? 안되나??

 

여하튼 해결 끝

 

반응형
반응형

기본 설계가 없는 플젝 빠르게 만들고 있는데

개발만 빨리 해달라더니.. 빠르게 하니 이것저것 요구하고 있음요 

 

기분좋게 해야 되는데 왜케 구찮을까요~~ㅎㅎ

 

인터셉터 사용

HandlerInterceptorAdapter 상속받은 클래스에서 

 

preHandle 인터셉터 에서 애러가 발생

 

return false; 해주면 그 상태에서 모든게 끝난다

 

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
        if(토큰이 없다면) {
            log.debug(" AuthKey  empty");
            response.sendError(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.getReasonPhrase());
            return false;
        }
    
    }

 

괜히 reponse.end 찾고 response에서 뭘 해볼려고 했는데 리턴값이 boolean 였던걸 몰랐다...

 

오늘 지른 모니터..

반응형
반응형

여러 디비 거쳐서 합친 리스트 데이터라 개 귀찮아서 Dto 안만든고 그대로 뿌린다고 @ResponseBody 로 뿌렸다

근데 

특정 애러면 바로 404 로 http 응답해주라는 요청..

HttpServletResponse response 파라미터 받아서 

response.sendError 애러 처리 하려고 했는데 리턴값 어쩌고 ..애러 발생... 폭풍검새

 

 

해결코드 !!! ㅎㅎㅎㅎㅎ

    @ResponseBody
    public Map<String, Object> 메서드()  throws NotFoundException {
    	if(1){
    		return map;
        }else{
            throw new NotFoundException();
        }
    }
    
    @ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Not Found")
    public class NotFoundException extends Exception {
        public NotFoundException() {
        }
    } 

좀 꺼림직 한데..

 

고객이 수시로 마구마구 요구사항 악마처럼 던져서 신경쓰기 개 귀찮

돌아가면 된거~~ 끝

 

뭘봐

반응형
반응형
{

    "id":"test",

       "status":

       { 

         "location":"E1",

         "mode":"2",

         "starttime":"2020/09/30 12:20:00",

         "endtime":"2020/09/30 13:50:00"

       },   

       "time":"2020/09/01 11:14:12"

}

 

위 json 넘어온 데이터 스프링 컨트롤러에서 받아서.

 

public test (@RequestBody Map<String, Object> param) {

}

 

넘어온 값을 아래처럼 json 다시 만들고 싶을때

{

    "id":"test",

       "status":

       { 

         "location":"E1",

         "mode":"2",

         "starttime":"2020/09/30 12:20:00",

         "endtime":"2020/09/30 13:50:00"

       },   

    "reg":{

      "id": "test

    }



}

 

map 데이터 신규 생성하여서 param map에 put 하면 해결 됨 

        //put renew 
        Map<String,Object> temp = new HashMap<>();
        temp.put("id",param.get("id"));  
        param.put("reg", temp);
        

 

반대로 던져줄 response도 개념은 같다

 

던질 맵 하나 만들고 키 추가한 후 계속 PUT PUT PUT PUT ~~~

 

개발 10년차 삽질

반응형
반응형

curl -X GET "http://localhost:8000/api/v1/sample" -H "accept: */*" -H "api-key: 헤더 두개넣기 "

 

-H 를 여러개 입력하면 됨

반응형
반응형

뭔가 인증할때 구현하면 개 편함

 

api 요청전 키 검증용으로 진행

 

 

    @Bean
    public RestApiInterceptor restApiInterceptor() {
        return new RestApiInterceptor();
    }

 

빈 생성

 

    // Interceptor 등록
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(restApiInterceptor()).addPathPatterns("/api/v1/**");
    }

 

public class RestApiInterceptor extends HandlerInterceptorAdapter {
    
    private static final Logger logger = LoggerFactory.getLogger(RestApiInterceptor.class);
        logger.debug("===============================================");
        logger.debug("==================== BEGIN ====================");
        
        return super.preHandle(request, response, handler);
    }
    
    
        @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.debug("==================== END ======================");
        logger.debug("===============================================");
    }   

 

이케 하면 /api/v1/

시작하는 url 은 

preHandle 검증후 

 이상없으면 로직실행

postHandle 로 end

 

아래 블로그글 로 사용법 참고.

 

congsong.tistory.com/24

 

스프링 부트(Spring Boot) - 인터셉터(Interceptor) 적용하기 [개발을 시작해봐요!]

이전 글에서는 프로젝트에 로그백(Logback)을 적용해서 SQL 쿼리 로그와 게시글의 정보를 테이블 형태로 출력하는 방법에 대해 알아보았습니다. 이번 글에서는 스프링에서 제공해주는 기능인 인터

congsong.tistory.com

 

 

 

반응형

+ Recent posts