Browse Source

버그 수정

v2
gudae01 1 year ago
parent
commit
4a91e1d129
  1. 15
      build.gradle
  2. 2
      gradle/wrapper/gradle-wrapper.properties
  3. 52
      src/main/java/org/mobidgim/mobidigimproject/common/api/Api.java
  4. 54
      src/main/java/org/mobidgim/mobidigimproject/common/api/Result.java
  5. 20
      src/main/java/org/mobidgim/mobidigimproject/common/error/ErrorCode.java
  6. 10
      src/main/java/org/mobidgim/mobidigimproject/common/error/ErrorCodeIfs.java
  7. 18
      src/main/java/org/mobidgim/mobidigimproject/config/filterconfig/FilterConfig.java
  8. 2
      src/main/java/org/mobidgim/mobidigimproject/config/objectmapper/ObjectMapperConfig.java
  9. 30
      src/main/java/org/mobidgim/mobidigimproject/config/swagger/SwaggerConfig.java
  10. 23
      src/main/java/org/mobidgim/mobidigimproject/controller/Controller.java
  11. 63
      src/main/java/org/mobidgim/mobidigimproject/filter/LoggerFilter.java
  12. 12
      src/main/java/org/mobidgim/mobidigimproject/service/SettingService.java
  13. 8
      src/main/resources/static/index.html

15
build.gradle

@ -1,7 +1,7 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.0'
id 'io.spring.dependency-management' version '1.1.7'
id 'org.springframework.boot' version '2.7.18'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'org.mobidgim'
@ -9,9 +9,16 @@ version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
languageVersion = JavaLanguageVersion.of(8)
}
}
tasks.withType(JavaCompile).configureEach {
options.release = null;
}
jar {
archiveClassifier.set("jdk8")
}
repositories {
mavenCentral()
@ -24,7 +31,7 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok:1.18.30'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.3'
// implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.3'
}

2
gradle/wrapper/gradle-wrapper.properties

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME

52
src/main/java/org/mobidgim/mobidigimproject/common/api/Api.java

@ -1,52 +0,0 @@
package org.mobidgim.mobidigimproject.common.api;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.mobidgim.mobidigimproject.common.error.ErrorCodeIfs;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Api<T> {
private Result result;
@Valid
private T body;
public static <T> Api<T> OK(T Data){
var api = new Api<T>();
api.result = Result.OK();
api.body = Data;
return api;
}
public static Api<Object> ERROR(String description){
var api = new Api<Object>();
api.result = Result.ERROR(description);
return api;
}
public static Api<Object> ERROR(Result result){
var api = new Api<Object>();
api.result = result;
return api;
}
public static Api<Object> ERROR(ErrorCodeIfs errorCodeIfs){
var api = new Api<Object>();
api.result = Result.ERROR(errorCodeIfs);
return api;
}
public static Api<Object> ERROR(ErrorCodeIfs errorCodeIfs, Throwable tx){
var api = new Api<Object>();
api.result = Result.ERROR(errorCodeIfs,tx);
return api;
}
public static Api<Object> ERROR(ErrorCodeIfs errorCodeIfs, String description){
var api = new Api<Object>();
api.result = Result.ERROR(errorCodeIfs,description);
return api;
}
}

54
src/main/java/org/mobidgim/mobidigimproject/common/api/Result.java

@ -1,54 +0,0 @@
package org.mobidgim.mobidigimproject.common.api;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.mobidgim.mobidigimproject.common.error.ErrorCode;
import org.mobidgim.mobidigimproject.common.error.ErrorCodeIfs;
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class Result {
private Integer resultCode;
private String resultMessage;
private String resultDescription;
public static Result OK(){
return Result.builder()
.resultCode(ErrorCode.OK.getErrorCode())
.resultMessage(ErrorCode.OK.getErrorDescription())
.resultDescription("성공")
.build();
}
public static Result ERROR(String description){
return Result.builder()
.resultDescription(description)
.build();
}
public static Result ERROR(ErrorCodeIfs errorCodeIfs){
return Result.builder()
.resultCode(errorCodeIfs.getErrorCode())
.resultMessage(errorCodeIfs.getErrorDescription())
.resultDescription("에러")
.build();
}
public static Result ERROR(ErrorCodeIfs errorCodeIfs,Throwable tx){
return Result.builder()
.resultCode(errorCodeIfs.getErrorCode())
.resultMessage(errorCodeIfs.getErrorDescription())
.resultDescription(tx.getLocalizedMessage())
.build();
}
public static Result ERROR(ErrorCodeIfs errorCodeIfs,String Description){
return Result.builder()
.resultCode(errorCodeIfs.getErrorCode())
.resultMessage(errorCodeIfs.getErrorDescription())
.resultDescription(Description)
.build();
}
}

20
src/main/java/org/mobidgim/mobidigimproject/common/error/ErrorCode.java

@ -1,20 +0,0 @@
package org.mobidgim.mobidigimproject.common.error;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.http.HttpStatus;
@AllArgsConstructor
@Getter
public enum ErrorCode implements ErrorCodeIfs {
OK(200, 200, "성공"),
BAD_REQUEST(HttpStatus.BAD_REQUEST.value(), 400, "잘못된 요청"),
NULL_POINT(HttpStatus.INTERNAL_SERVER_ERROR.value(), 512, "NULL POINT"),
SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR.value(), 500, "서버 에러");
private final Integer httpStatusCode;
private final Integer errorCode;
private final String errorDescription;
}

10
src/main/java/org/mobidgim/mobidigimproject/common/error/ErrorCodeIfs.java

@ -1,10 +0,0 @@
package org.mobidgim.mobidigimproject.common.error;
public interface ErrorCodeIfs {
Integer getHttpStatusCode();
Integer getErrorCode();
String getErrorDescription();
}

18
src/main/java/org/mobidgim/mobidigimproject/config/filterconfig/FilterConfig.java

@ -1,18 +0,0 @@
package org.mobidgim.mobidigimproject.config.filterconfig;
import org.mobidgim.mobidigimproject.filter.LoggerFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<LoggerFilter> loggerFilter() {
FilterRegistrationBean<LoggerFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new LoggerFilter());
registration.addUrlPatterns("/*");
registration.setOrder(1);
return registration;
}
}

2
src/main/java/org/mobidgim/mobidigimproject/config/objectmapper/ObjectMapperConfig.java

@ -14,7 +14,7 @@ public class ObjectMapperConfig {
@Bean
public ObjectMapper objectMapper() {
var objectMapper = new ObjectMapper();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jdk8Module());
objectMapper.registerModule(new JavaTimeModule());

30
src/main/java/org/mobidgim/mobidigimproject/config/swagger/SwaggerConfig.java

@ -1,15 +1,15 @@
package org.mobidgim.mobidigimproject.config.swagger;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.core.jackson.ModelResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SwaggerConfig {
@Bean
public ModelResolver modelResolver(ObjectMapper objectMapper) {
return new ModelResolver(objectMapper);
}
}
//package org.mobidgim.mobidigimproject.config.swagger;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import io.swagger.v3.core.jackson.ModelResolver;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//@Configuration
//public class SwaggerConfig {
// @Bean
// public ModelResolver modelResolver(ObjectMapper objectMapper) {
// return new ModelResolver(objectMapper);
// }
//}
//

23
src/main/java/org/mobidgim/mobidigimproject/controller/Controller.java

@ -1,7 +1,6 @@
package org.mobidgim.mobidigimproject.controller;
import lombok.AllArgsConstructor;
import org.mobidgim.mobidigimproject.common.api.Api;
import org.mobidgim.mobidigimproject.model.device.DeviceDTO;
import org.mobidgim.mobidigimproject.model.register.RegisterDTO;
import org.mobidgim.mobidigimproject.service.SettingService;
@ -29,31 +28,31 @@ public class Controller {
private SettingService settingService;
@PostMapping("/device")
public ResponseEntity<Api<Object>> settingDevice(@RequestBody DeviceDTO request) throws IOException {
public ResponseEntity<Object> settingDevice(@RequestBody DeviceDTO request) throws IOException {
try{
settingService.saveFileWithDevice(request);
return ResponseEntity.ok().body(Api.OK("저장성공"));
return ResponseEntity.ok("success");
}catch(IOException e){
return ResponseEntity.internalServerError().body(Api.ERROR("저장실패"));
return ResponseEntity.ok("save failed");
}
}
@GetMapping("/get-device")
public ResponseEntity<Api<DeviceDTO>> getDevice() throws IOException {
var entity = settingService.readFileWithDevice();
return ResponseEntity.ok().body(Api.OK(entity));
public ResponseEntity<DeviceDTO> getDevice() throws IOException {
DeviceDTO entity = settingService.readFileWithDevice();
return ResponseEntity.ok(entity);
}
@PostMapping("/protocol")
public Api<RegisterDTO> settingRegister(@RequestBody RegisterDTO request)throws IOException{
public ResponseEntity<RegisterDTO> settingRegister(@RequestBody RegisterDTO request)throws IOException{
settingService.saveFileWithRegister(request);
return Api.OK(request);
return ResponseEntity.ok(request);
}
@GetMapping("/get-protocol")
public Api<RegisterDTO> getRegister() throws IOException {
var entity = settingService.readFileWithRegister();
return Api.OK(entity);
public ResponseEntity<RegisterDTO> getRegister() throws IOException {
RegisterDTO entity = settingService.readFileWithRegister();
return ResponseEntity.ok(entity);
}
}

63
src/main/java/org/mobidgim/mobidigimproject/filter/LoggerFilter.java

@ -1,63 +0,0 @@
package org.mobidgim.mobidigimproject.filter;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.util.ContentCachingRequestWrapper;
import org.springframework.web.util.ContentCachingResponseWrapper;
import java.io.IOException;
@Slf4j
public class LoggerFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
var req = new ContentCachingRequestWrapper((HttpServletRequest) request);
var res = new ContentCachingResponseWrapper((HttpServletResponse) response);
log.info("INIT URI: {}", req.getRequestURI());
chain.doFilter(req,res);
var headersNames = req.getHeaderNames();
var headersValues = new StringBuilder();
headersNames.asIterator().forEachRemaining(headerKey->{
var headerValue = req.getHeader(headerKey);
headersValues.append("[")
.append(headerKey)
.append(":")
.append(headerValue)
.append("]");
});
var requestBody = new String(req.getContentAsByteArray());
var uri = req.getRequestURI();
var method = req.getMethod();
log.info(">>>> uri: {}, method: {}, header: {}, body: {}",uri,method,headersValues,requestBody);
var responseHeadersValues = new StringBuilder();
res.getHeaderNames().forEach(headerKey ->{
var headerValue = req.getHeader(headerKey);
responseHeadersValues.append("[")
.append(headerKey)
.append(":")
.append(headerValue)
.append("]");
});
var responseBody = new String(res.getContentAsByteArray());
log.info("<<<< uri: {}, method: {}, header: {}, body: {}",uri,method,responseHeadersValues,responseBody);
res.copyBodyToResponse();
}
}

12
src/main/java/org/mobidgim/mobidigimproject/service/SettingService.java

@ -24,6 +24,7 @@ import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class SettingService {
@ -60,7 +61,7 @@ public class SettingService {
ensureDirectoryExists();
String filePath = TEMP_DIRECTORY + "/" + filename;
Files.writeString(Paths.get(filePath), json);
Files.createDirectory(Paths.get(filePath));
}
// Device 파일 읽기 (기본 파일명 사용)
@ -77,7 +78,7 @@ public class SettingService {
throw new IOException("Device configuration file not found: " + filename);
}
String jsonString = Files.readString(path);
String jsonString = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
@ -119,7 +120,8 @@ public class SettingService {
ensureDirectoryExists();
String filePath = TEMP_DIRECTORY + "/" + filename;
Files.writeString(Paths.get(filePath), json);
Path path = Paths.get(filePath);
Files.write(path, json.getBytes(StandardCharsets.UTF_8));
return request;
}
@ -138,7 +140,7 @@ public class SettingService {
throw new IOException("Protocol configuration file not found: " + filename);
}
String jsonString = Files.readString(path);
String jsonString = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
@ -186,6 +188,6 @@ public class SettingService {
return false; // 파일이 해당 타입에 맞지 않으면 제외
}
})
.toList();
.collect(Collectors.toList());
}
}

8
src/main/resources/static/index.html

@ -1471,8 +1471,8 @@
const deviceResponse = await fetch('http://localhost:8080/setting/get-device');
if (deviceResponse.ok) {
const deviceData = await deviceResponse.json();
if (deviceData && deviceData.body) {
loadFromData(deviceData.body);
if (deviceData) {
loadFromData(deviceData);
console.log('Device Load completed (Default file: deviceConfig.json)');
} else {
console.warn('Device response received, but no body found.');
@ -1488,8 +1488,8 @@
const protocolResponse = await fetch('http://localhost:8080/setting/get-protocol');
if (protocolResponse.ok) {
const protocolData = await protocolResponse.json();
if (protocolData && protocolData.body) {
loadFromRegisterJson(protocolData.body);
if (protocolData) {
loadFromRegisterJson(protocolData);
console.log('Protocol Load completed (Default file: protocolConfig.json)');
} else {
console.warn('Protocol response received, but no body found.');

Loading…
Cancel
Save