728x90
반응형
728x90
반응형
728x90
반응형

spring에섯 response를 json으로 받을때 날짜 포맷 처리

 

1. gradle

1
2
implementation('com.fasterxml.jackson.datatype:jackson-datatype-jdk8')
implementation('com.fasterxml.jackson.datatype:jackson-datatype-jsr310')
cs

 

2. application.properties

1
2
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
cs

3. 1,2번을 적용해도 반영되지 않을때

@EnableWebMvc 값을 주석 처리 

참고 : https://github.com/spring-projects/spring-boot/issues/6642

 

728x90
반응형
728x90
반응형

페이징을 처음 하나하나 만들었을때는 정말... 어렵다기보단 귀찮고 손이 많이 갔다.

다행히 최근에 알게된 pagehelper를 사용하면 페이징에 필요한 정보를 한번에 간단하게 얻을 수 있게 된다.

 

아래는 pagehelper를 적용하기 위한 셈플 소스

 

1. gradle에 추가

1
implementation group: 'com.github.pagehelper', name: 'pagehelper-spring-boot-starter', version: '1.2.10'
cs

2. properties 추가

1
2
3
# Pagehelper Setting (사용하는 DB, 페이지 번호의 가능 범위 자동 제한)
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
cs

3. controller

1
2
3
4
    @GetMapping(value = "/getPageList")
    public PageInfo<GroupCode> getPageList(SearchGrpCodeReqDTO serachDTO) throws Exception {
        return new PageInfo<GroupCode>(service.getPageList(serachDTO));
    }
cs

4. service

PageHelper.startPage(현재 페이지 번호, 한 페이지에 노출할 row 수);

1
2
3
4
    public Page<GroupCode> getPageList(SearchGrpCodeReqDTO reqDTO) throws Exception {
        PageHelper.startPage(reqDTO.getPage(), reqDTO.getPageSize());
        return (Page<GroupCode>) groupCoceMapper.getPageList(reqDTO);
    }
cs

5. mapper

1
 public Page<GroupCode> getPageList(SearchGrpCodeReqDTO serachReqDTO) throws Exception ;
cs

6. mapper.xml

1
2
3
4
5
6
    <select id="getPageList" 
        parameterType="com.deonggi.bookkeeping.admin.system.grpcd.service.dto.SearchGrpCodeReqDTO" 
        resultType="com.deonggi.bookkeeping.core.model.entity.GroupCode">
        SELECT * FROM GROUP_CODE
        ORDER BY CRT_DT ASC
    </select>
cs

7. 리턴된 결과

(참고로 GROUP_CODE 테이블의 전체 row 수는 16개다.)

mapper.xml에서는 모든 row를 조회하지만,

pagehelper를 적용하면 실제 list에는 아래 쿼리 조회 결과만 들어 있다.

 

SELECT * FROM GROUP_CODE
ORDER BY CRT_DT ASC LIMIT 5

 

쿼리문에 limit 가 추가되어 있는데 이 정보는 위 4번에서 PageHelper.startPage()에 의해 적용되는 정보다.

 

결과적으로 pagehelper를 적용하면 개발자는 한번의 조회를 위한 코드를 통해 페이징을 위한 모든 정보를 얻을 수 있게 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

## pagehelper github의 정보 : github.com/pagehelper/Mybatis-PageHelper

 

pagehelper/Mybatis-PageHelper

Mybatis通用分页插件. Contribute to pagehelper/Mybatis-PageHelper development by creating an account on GitHub.

github.com

중국어라 왠지 신뢰가 안 갈 수 있지만 상당히 쓸만하다....

728x90
반응형

'코딩 삽질' 카테고리의 다른 글

[jQuery DataTable] table paging 적용  (0) 2021.03.31
[java, spring] spring.jackson.date-format 적용하기  (0) 2021.03.31
[java] StringTrimConverter  (0) 2021.03.24
[java, spring] modelmapper 사용하기  (0) 2021.03.24
[sts] war 생성  (0) 2020.09.16
728x90
반응형

간단하게 dto를 entity에 넣어주고 싶을때 modelmapper를 사용하면 한줄로 해결할 수 있다.

 

# modelmapper 사용하는 방법

1. gradle에 추가하기

1
implementation group: 'org.modelmapper', name: 'modelmapper', version: '2.3.2'
cs

 

2. Bean 등록

1
2
3
4
5
6
7
    /**
     * ModelMapper 설정
     */
    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }
cs

 

3. Service에서 modelmapper 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @Autowired
    private ModelMapper modelMapper;
 
    public GroupCode insertItem(GrpCodeReqDTO reqDTO) {
        GroupCode entity = modelMapper.map(reqDTO, GroupCode.class);
        return groupCodeRepository.save(entity);
    }
 
    public GroupCode updateItem(GrpCodeReqDTO reqDTO) {
        GroupCode entity = groupCodeRepository.findById(reqDTO.getGrpCd());
        modelMapper.map(reqDTO, entity);
        return groupCodeRepository.save(entity);
    }
 
cs

5번 라인의 GroupCode entity = modelMapper.map(reqDTO, GroupCode.class);

11번 라인의 modelMapper.map(reqDTO, entity);

해당 라인을 참고하여 사용하면 된다.

 

 

※ 참고사항: 맵핑에 대한 설정정보

ModelMapper - Configuration

Configuration ModelMapper uses a set of conventions and configuration to determine which source and destination properties match each other. Available configuration, along with default values, is described below: Setting Description Default Value Access le

modelmapper.org

 

728x90
반응형
728x90
반응형

Java의 VO

1
2
3
4
5
6
7
8
9
10
11
@Setter
@Getter
@ToString
public class MaterialVO {
 
    private int mtrlSeq;
    private String mtrlNm;
    private String mtrlTp;
    private String qty;
 
}
cs

====

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Setter
@Getter
@ToString
public class ProductVO {
 
    private int prodSeq;
    private String prodNm;
    private String recipe;
    private String showYn;
 
    // 재료 리스트
    private List<MaterialVO> material;
 
}
cs

대략 이런 구조라고 해보자.

이때 html에서는 재료리스트는 어떻게 네이밍 해줘야 할까?

 

1
2
3
4
5
6
<input type="text" name="prodSeq" th:value="${detailVO != null ? detailVO.prodSeq: '-1'}"/>
 
<!-- List  -->
<input type="text" name="material[0].mtrlNm" th:value="${detailVO.mainMaterial[0].mtrlNm}">
<input type="text" name="material[1].mtrlNm" th:value="${detailVO.mainMaterial[1].mtrlNm}">
 
cs

 

이건 thymeleaf 문법이 포함된 건데,

value 부분은 ModelAndView에 mav.addObject("detailVO", detailVO) 로 값을 넣어준 경우로 참고하면 되고,

중요건 name 부분이다. name="material[i].mtrlNm" 형태다.

 

ProductVO이 List<MaterialVO> material;

name="material[i].mtrlNm"

붉은색 부분의 네이밍이 같다는 것과 배열과 형태로 인덱스를 지정하고 마침표(.)로 변수명을 구분한다는 것을 주의하면 된다.

 

 

 

출처 : https://cofs.tistory.com/84

 

 

728x90
반응형

+ Recent posts