소개
게시글
질문&답변
2021.08.02
카프카 커넥트 서버 기동시 발생하는 오류
저도 같은 문제가 발생했습니다만 해결되어 글을 남깁니다. Kafka Connect에서 설정 관련 디렉토리는 config가 아닌 etc 입니다. 하지만 connect-distributed.bat에서는 log4j의 경로를 존재하지 않는 %BASE_DIR%/ config/connect-log4j.properties으로 잡고 있습니다. 따라서 connect-distributed.bat의 log4j 경로를 %BASE_DIR%/ config/connect-log4j.properties 에서 %BASE_DIR%/etc/kafka/connect-log4j.properties로 바꾸어주면 해결 가능합니다.
- 4
- 5
- 3.8K
질문&답변
2021.06.07
Swagger와 Jackson Filter 사용 시 Swagger-ui의 example value
저 또한 Postman을 이용하여 'GET /users/1'에 대한 Request로 다음과 같은 Response를 정상적으로 받고 있습니다. (사진) User controller의 'GET /users/{id}' 요청은 JsonFilter를 적용하여 MappingJacksonValue를 반환하도록 코드를 작성하였으며, 이로인해 Swagger-ui에서 User controller의 'GET /users/{id}'에 대한 Example value에서 다음과 같이 User Domain 클래스의 필드 구조를 제대로 보여주지 않았고 이를 문제라고 생각하였습니다. (사진) 필터를 적용하지 않고, EntityModel 를 반환하는 경우는 다음과 같이 example value가 올바르게 표시됩니다. 저는 MappingJacksonValue와 EntitiyModel , 즉, 반환값의 차이에서 이러한 문제가 발생했다고 생각하고 있습니다. (사진) swagger-ui Models의 User에서는 User Domain Class에 대한 정보를 올바르게 표시하고 있습니다. (사진) 다음은 작성한 User.java, UserController.java, pom.xml의 코드 입니다. User.java package com.example.restfulwebservice.user ; import com.fasterxml.jackson.annotation. JsonFilter ; import com.fasterxml.jackson.annotation. JsonIgnore ; import com.fasterxml.jackson.annotation. JsonIgnoreProperties ; import io.swagger.annotations. ApiModel ; import io.swagger.annotations. ApiModelProperty ; import lombok. AllArgsConstructor ; import lombok. Data ; import lombok. NoArgsConstructor ; import javax.validation.constraints. Past ; import javax.validation.constraints. Size ; import java.util.Date ; @Data @AllArgsConstructor @NoArgsConstructor //@JsonIgnoreProperties(value = {"password", "ssn"}) @JsonFilter ( "UserInfo" ) @ApiModel (description = " 사용자 상세 정보를 위한 도메인 객체 " ) public class User { private Integer id ; @Size (min= 2 , message = "Name 은 2 글자 이상 입력해 주세요 ." ) @ApiModelProperty (notes = " 사용자 이름을 입력해 주세요 ." ) private String name ; // 미래 데이터 사용 X @Past @ApiModelProperty (notes = " 사용자 등록일을 입력해 주세요 ." ) private Date joinDate ; @ApiModelProperty (notes = " 사용자 비빌번호를 입력해 주세요 ." ) private String password ; @ApiModelProperty (notes = " 사용자 주민등록번호를 입력해 주세요 ." ) private String ssn ; } UserController.java package com.example.restfulwebservice.user ; import com.fasterxml.jackson.databind.ser.FilterProvider ; import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter ; import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider ; import org.springframework.beans.factory.annotation. Autowired ; import org.springframework.hateoas.CollectionModel ; import org.springframework.hateoas.EntityModel ; import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder ; import org.springframework.http.ResponseEntity ; import org.springframework.http.converter.json.MappingJacksonValue ; import org.springframework.web.bind.annotation.* ; import org.springframework.web.servlet.support.ServletUriComponentsBuilder ; import javax.validation. Valid ; import java.net.URI ; import java.util.ArrayList ; import java.util.List ; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder. linkTo ; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder. methodOn ; @RestController public class UserController { @Autowired private UserDaoService service ; // public UserController(UserDaoService service) { // this.service = service; // } @GetMapping ( "/users" ) public List > retrieveAllUsers () { List > models = new ArrayList () ; List users = service .findAll() ; // HATEOAS for (User user : users) { EntityModel model = EntityModel. of (user) ; model.add( linkTo ( methodOn ( this .getClass()).retrieveAllUsers()).withSelfRel()) ; models.add(model) ; } // JacksonFilter // SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter // .filterOutAllExcept("id", "name", "joinDate"); // FilterProvider filters = new SimpleFilterProvider().addFilter("UserInfo", filter); // // MappingJacksonValue mapping = new MappingJacksonValue(models); // mapping.setFilters(filters); return models ; } @GetMapping ( "/users/{id}" ) public MappingJacksonValue retrieveUser ( @PathVariable int id) { User user = service .findOne(id) ; if (user == null ) { throw new UserNotFoundException(id) ; } // HATEOAS EntityModel model = EntityModel. of (user) ; WebMvcLinkBuilder linkTo = linkTo ( methodOn ( this .getClass()).retrieveAllUsers()) ; model.add(linkTo.withRel( "all-users" )) ; linkTo = linkTo ( methodOn ( this .getClass()).updateUser(user , id)) ; model.add(linkTo.withRel( "update-user" )) ; // JacksonFilter SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter . filterOutAllExcept ( "id" , "name" , "joinDate" ) ; FilterProvider filters = new SimpleFilterProvider().addFilter( "UserInfo" , filter) ; MappingJacksonValue mapping = new MappingJacksonValue(model) ; mapping.setFilters(filters) ; return mapping ; } @PostMapping ( "/users" ) public ResponseEntity createUser ( @Valid @RequestBody User user) { User savedUser = service .save(user) ; URI location = ServletUriComponentsBuilder. fromCurrentRequest () .path( "/{id}" ) .buildAndExpand(savedUser.getId()) .toUri() ; return ResponseEntity. created (location).build() ; } @DeleteMapping ( "/users/{id}" ) public void deleteUser ( @PathVariable int id) { User user = service .deleteById(id) ; if (user == null ) { throw new UserNotFoundException(id) ; } } @PutMapping ( "/users/{id}" ) public ResponseEntity updateUser ( @RequestBody User user , @PathVariable int id) { User updatedUser = service .update(user , id) ; if (updatedUser != null ) { return ResponseEntity. noContent ().build() ; } else { throw new UserNotFoundException(id) ; } } } pom.xml xml version ="1.0" encoding ="UTF-8" ?> xmlns ="http://maven.apache.org/POM/4.0.0" xmlns: xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi :schemaLocation ="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" > 4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.5 com.example restful-web-service 0.0.1-SNAPSHOT restful-web-service Demo project for Spring Boot 16 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-validation org.springframework.boot spring-boot-devtools runtime true com.h2database h2 runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-hateoas test org.assertj assertj-core com.fasterxml.jackson.dataformat jackson-dataformat-xml 2.10.2 org.springframework.hateoas spring-hateoas io.springfox springfox-boot-starter 3.0.0 org.springframework.boot spring-boot-starter-actuator org.springframework.data spring-data-rest-hal-explorer 3.5.1 org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok
- 0
- 2
- 1.3K