cnw529
@paradisechoi
Reviews Written
2
Average Rating
5.0
Posts
Q&A
์นดํ์นด ์ปค๋ฅํธ ์๋ฒ ๊ธฐ๋์ ๋ฐ์ํ๋ ์ค๋ฅ
์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค๋ง ํด๊ฒฐ๋์ด ๊ธ์ ๋จ๊น๋๋ค. 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
- 6
- 4.4K
Q&A
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;@RestControllerpublic 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.6K




