반응형

문제 발생

Enum

@AllArgsConstructor
@Getter
public enum Foo {

  A("에이", "a"),
  B("비", "b"),
  C("씨", "c");

  private String korean;
  private String small;

}

 

Controller

@RestController
public class EnumController {

  @GetMapping("/enum/{code}")
  private RestResponse showFoo(@PathVariable String code){
    return new RestResponse(true, Foo.valueOf(code));
  }
}

 

Response 객체

@Getter
public class RestResponse {

  private boolean success;

  private Foo data;

  public RestResponse(boolean success, Foo data) {
    this.success = success;
    this.data = data;
  }
}

위와 같이 코드 값을 주소에 입력받으면,

코드에 해당하는 전체 객체를 리턴해주고 싶은데, 아래와 같이 출력됐다.

해결 방법

1. Enum 객체 전체 리턴해주기

@JsonFormat(shape = Shape.OBJECT) // 추가
@AllArgsConstructor
@Getter
public enum Foo {

  A("에이", "a"),
  B("비", "b"),
  C("씨", "c");

  private String korean;
  private String small;

}

Enum 객체에 @JsonFormat 어노테이션을 추가해준다.

리턴받는 기댓값은 객체 형태이기 때문에 Shape.OBJECT로 설정해준다.

 

2. 값만 리턴해주기

@AllArgsConstructor
@Getter
public enum Foo {

  A("에이", "a"),
  B("비", "b"),
  C("씨", "c");

  @JsonValue // 추가
  private String korean;
  private String small;

}

만약 특정 값만 리턴하고 싶다면, 변수에 @JsonValue 어노테이션을 추가해준다.

상황에 따라 골라서 쓰면 될 것 같다. 😁


출처 : https://shinsunyoung.tistory.com/73

반응형
,
반응형

1. 개요

  • 라이브러리가 OpenAPI 3.0 스펙에 맞는 JSON을 자동으로 만들어 주면, Swagger UI는 만들어진 JSON을 바탕으로 화면에 표시 해줍니다.
  • Spring Boot 2.0.9.RELEASE로 테스트 하였습니다.

2. 문제 해결

  • messageconverter가 설정되어 있어서 Swagger UI가 /v3/api-docs/ end-point로 접근시 String으로 감싼 JSON 형으로 리턴됨.
    1. HttpServletRequest 객체의 getRequestURI 메소드를 사용하여 요청한 Uri를 가져옴.
    2. Uri가 /v3/api-docs/ 또는 /v3/api-docs/swagger-config 인지 확인하여 원본 내용을 리턴하게 예외처리. (e.g. json이면 json으로)

3. build.gradle 파일에 dependency 추가

dependencies {
    implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.2.30'
}

4. 설정 파일에 관련 설정 추가

springdoc:
  api-docs:
    groups:
      enabled: true
  swagger-ui:
    path: /swagger-ui.html
    displayRequestDuration: true
    groups-order: DESC

5. OpenApiConfig.java 파일 작성

package kr.webgori.lolien.discord.bot.config;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@OpenAPIDefinition(
    info = @Info(title = "lolien-discord-bot API 명세서",
        description = "API 명세서",
        version = "v1",
        contact = @Contact(name = "webgori", email = "webgori@gmail.com"),
        license = @License(name = "Apache 2.0",
            url = "http://www.apache.org/licenses/LICENSE-2.0.html")
    )
)
@Configuration
public class OpenApiConfig {
  /**
   * customGameOpenApi.
   * @return GroupedOpenApi
   */
  @Bean
  public GroupedOpenApi customGameOpenApi() {
    String[] paths = {"/custom-game/**"};
    return GroupedOpenApi.builder().setGroup("내전 관련 API").pathsToMatch(paths)
        .build();
  }

  /**
   * leagueOpenApi.
   * @return GroupedOpenApi
   */
  @Bean
  public GroupedOpenApi leagueOpenApi() {
    String[] paths = {"/league/**"};
    return GroupedOpenApi.builder().setGroup("리그 관련 API").pathsToMatch(paths)
        .build();
  }
}

6. Swagger UI 확인

  • http://IP 또는 도메인:포트/swagger-ui.html 으로 접속 후 확인


출처 : https://webgori.github.io/spring/2020/02/09/OpenAPI-3.0%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-Spring-REST-API-%EB%AC%B8%EC%84%9C%ED%99%94.html

반응형
,
반응형

이번 포스트에서는 스크롤뷰(ScrollView)의 자동 스크롤 방법에 대해 알아 보도록 하겠습니다.


맨 위 / 아래로 ScrollView 자동 스크롤

ScrollView 의 맨 위/아래로 자동 스크롤 하는 방법은 fullScroll을 사용하는 방법입니다.

인자값으로는 ScrollView.FOCUS_DOWN 과 ScrollView.FOCUS_UP 이 있습니다.

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview));
scrollview.post(new Runnable() {
    @Override
    public void run() {
        scrollview.fullScroll(ScrollView.FOCUS_DOWN);
    }
});



ScrollView 자동 스크롤 - 기본 함수 사용

특정 위치만큼만 스크롤 하려면 아래와 같이 smoothScrollBy() 혹은 smoothScrollTo() 함수를 이용하면 됩니다.

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview));
scrollview.post(new Runnable() {
    @Override
    public void run() {
        scrollview.smoothScrollBy(0, 800);
    }
});



ScrollView 자동 스크롤 - 스크롤 속도 변경

위에 소개된 함수들은 스크롤 속도가 정해져 있어 속도를 느리게 하고 싶으신 분들은 아래와 같은 방법으로 스크롤 속도를 조절할 수 있습니다.

* scrollTo 는 스크롤 하고 싶은 곳의 Y 값, 만약 맨 안래로 하고 싶으면 scrollView.getBottom() 을 넣어주면 됨.

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview));
scrollview.post(new Runnable() {
    @Override
    public void run() {
        ObjectAnimator.ofInt(scrollView, "scrollY",  scrollTo).setDuration(duration).start();
    }
});




출처: https://tiann.tistory.com/13 [티앤의 IT월드]

반응형
,