Ответы пользователя по тегу Java
  • Как добавить Hibernate в логи?

    включил все логи через root посмотрел имена классов которые пишут нашел их package вставил с INFO остальное c FATAL

    файл logback.xml д б в src/main/resurces
    есть способ указать в командной строке где но это отдельная история
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="30 seconds">
      <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <encoder>
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
      </appender>
      <variable name="BASEDIR" value="${BASEDIR:-.}"/>
      <!-- https://www.cloudesire.com/configure-logback-log-level-via-environment-variables/ -->
      <property name="FILENAME" value="App"/>
      <property name="DIR" value="${BASEDIR}/logs"/>
      <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- can use ${APP_HOME} -->
        <file>${DIR}/${FILENAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
          <fileNamePattern>${DIR}/${FILENAME}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
          <maxFileSize>100KB</maxFileSize>
          <totalSizeCap>1MB</totalSizeCap>
          <maxHistory>1</maxHistory>
        </rollingPolicy>
        <encoder>
          <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
      </appender>
      <root level="WARN">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
      </root>
      <logger name="example" level="DEBUG" additivity="false">
        <appender-ref ref="FILE"/>
      </logger>
      <logger name="org.springframework.data" level="FATAL"/>
      <logger name="org.hibernate" level="FATAL"/>
      <logger name="org.hibernate.hql" level="DEBUG">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
      </logger>
    
      <logger name="org.springframework.jdbc.core" level="DEBUG">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
      </logger>
    </configuration>
    Ответ написан
    Комментировать
  • Как подключиться к MS SQL и победить проблему с TLS10?

    How to allow TLS1.0 in com.microsoft.sqlserver.jdbc

    TLS v1.0 and v1.1 Microsoft SQL Server Database ..
    https://support.inductiveautomation.com/hc/en-us/a...

    пошаговое руководство
    Ответ написан
    Комментировать
  • Как правильно создать БД в одном execute?

    технически можно при поощи
    jdbc_prefix = "mysql";
    options = "allowMultiQueries=true&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8";
    "jdbc:" + jdbc_prefix+"://" + serverName + "/" + databaseName + "?" + options;

    https://stackoverflow.com/questions/10797794/multi...

    но не рекомендуется в приложениях
    Ответ написан
    Комментировать
  • Как в Docker запустить процессы из под текущего пользователя?

    в демо проекте пришлось явно задать агрумeнты в docker-compose.yml:

    version: "3.7"
    
    services:
      app:
        image: sample-java17-app
        user: "${UID:-1000}:${GID:-1000}"
        command: "java -jar /app/target/demo-2.7.5.jar"
        volumes:
          - .:/app
        ports:
          - "8585:8080"
        environment:
          UID: ${UID:-1000}
          GID: ${GID:-1000}


    замените 1000 на то что дает $(id -u) $(id -g) в вашей машине

    эта же тема обсуждается например

    https://blog.giovannidemizio.eu/2021/05/24/how-to-...
    https://nickjanetakis.com/blog/running-docker-cont...
    Ответ написан
    Комментировать
  • Как правильно кодировать "неправильный" URL?

    это

    https://ru.wikipedia.org/wiki/IDN#%D0%A0%D0%B5%D0%...

    https://docs.oracle.com/javase/7/docs/api/java/net...

    Provides methods to convert internationalized domain names (IDNs) between a normal Unicode representation and an ASCII Compatible Encoding (ACE) representation


    примеры кода
    www.java2s.com/example/java-api/java/net/idn/index.html
    Ответ написан
    Комментировать
  • Как достать данные из бд?

    почитайте пожалуйста
    про
    Spring Data JDBC
    один ко многим
    https://javabydeveloper.com/spring-data-jdbc-one-t...
    https://habr.com/ru/company/otus/blog/531332/
    https://lumberjackdev.com/spring-data-jdbc
    Ответ написан
    Комментировать
  • Как сделать low_case ключи и значение приходящих json в java?

    это описано в
    https://www.baeldung.com/jackson-advanced-annotati...

    The @JsonNaming annotation is used to choose the naming strategies for properties in serialization, overriding the default. Using the value element, we can specify any strategy, including custom ones.
    Ответ написан
    Комментировать
  • Как создать метод из SQL запроса?

    то же самое почти что:

    ResultSet resultSet = statement.executeQuery("SELECT count(*) as cnt FROM customers WHERE name = 'Bob' AND purchase = 'bike'");
      resultSet.next(); // not first() with PGSL JDBC it is forward only cursor
      final int cnt = resultSet.getInt(1);   
      System.out.println("cnt: " + cnt);


    учтите что можно конечно исходный SQL запрос выполнит через JDBC но его синтаксис не является стандартным SQL это какое то постгрес расширение:

    String query = "SELECT count(*) <> 0 FROM accounts WHERE username = 'bob';";
                  System.out.println("Executing count query: " + query);
                  ResultSet resultSet = connection.createStatement().executeQuery(query);
                  resultSet.next();
                  final boolean status = resultSet.getBoolean(1);
                  System.out.println("status: " + status);
    Ответ написан
  • Как распарсить данную JSON строку?

    посмотрели код - ошибок не нашли. проблема была с импортированной org.json.jso.jar -
    Ответ написан
    Комментировать
  • Почему высвечивается ошибка и как ее исправить?

    синтаксис Java запрещает переназначать имя переменной, которая уже объявлена во внешней области действия
    у вас в цикле и в аргументе метода одинаковое имя переменной player
    Ответ написан
    Комментировать
  • Как сделать аутентификацию без использования html формы?

    добавляете 2 конфигурационных класса в которых описываете и внедряете безопасность

    package example.config;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    @Configuration
    @EnableWebSecurity
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    
    	private final static String username = "admin";
    	private final static String password = "password";
    
    	@Autowired
    	private BasicAuthenticationPoint basicAuthenticationPoint;
    
    	@Override
    	protected void configure(HttpSecurity http) throws Exception {
    		http.csrf().disable();
    		http.authorizeRequests().antMatchers("/", "/api/**").permitAll()
    				.anyRequest().authenticated();
    		http.httpBasic().authenticationEntryPoint(basicAuthenticationPoint);
    	}
    
    	// https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released#password-storage-format
    	@Autowired
    	public void configureGlobal(AuthenticationManagerBuilder auth)
    			throws Exception {
    		auth.inMemoryAuthentication().withUser(username)
    				.password(String.format("{noop}%s", password)).roles("USER");
    	}
    
    }

    package example.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.security.core.AuthenticationException;
    import org.springframework.security.crypto.factory.PasswordEncoderFactories;
    import org.springframework.security.crypto.password.PasswordEncoder;
    import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint;
    import org.springframework.stereotype.Component;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @Component
    public class BasicAuthenticationPoint extends BasicAuthenticationEntryPoint {
    	private static final String realName = "user";
    
    	@Override
    	public void commence(HttpServletRequest request, HttpServletResponse response,
    			AuthenticationException e) throws IOException {
    		response.addHeader("WWW-Authenticate", "Basic realm=" + getRealmName());
    		response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
    
    		PrintWriter writer = response.getWriter();
    		writer.println("HTTP Status 401 - " + e.getMessage());
    
    	}
    
    	@Override
    	public void afterPropertiesSet() {
    		setRealmName(realName);
    		super.afterPropertiesSet();
    	}
    
    
    }


    после этого

    mvn -Dmaven.test.skip=true clean spring-boot:run
    curl --silent http://localhost:8080/
    HTTP Status 401 - Full authentication is required to access this resource

    curl --silent --user admin:wrong_password http://localhost:8080/employees

    HTTP Status 401 - Bad credentials
    curl -silent --user admin:password http://localhost:8080/employees

    HTTP Status 200 OK
    ...
    то что контроллер должен ответить


    пароль нешифрованный:
    Basic YWRtaW46cGFzc3dvcmQ=

    echo 'YWRtaW46cGFzc3dvcmQ=' | base64 -d -
    admin:password

    я это вот использую для стаб сервера на который некое другое приложение которое я например отлаживаю постит всякую всячину но например не всем должно быть разрешено
    Ответ написан
  • Изменить цвет краёв в JMenu?

    Ответ написан
    Комментировать
  • Как сделать редирект на сокет сервере?

    ваш сервер должен возвращать
    статус 301

    sendHeader("HTTP/1.1 301 Moved Permanently");
    или 302
    sendHeader("HTTP/1.1 302 Found");
    Ответ написан
    Комментировать
  • Какие способы для создания DSL есть в Java?

    avadakeda думаю вам надо сузить вопрос какой специфически DSL и для какой цели ищете а то слишком много чего можно ответить - информации овердофига, и гуглится легко
    Ответ написан
    Комментировать
  • Java работа с BufferedReader в чем ошибка?

    переменная пере-считывается до тех пор пока что-нибудь не будет введено:

    while (!questions.isEmpty()) {
    	String question = questions.pop();
    	System.out.println(question);
    	String line = null;
    	while (line == null || line.isEmpty())
    		line = bufferedReader.readLine();
    	answer.add(line);
    }
    Ответ написан
    Комментировать
  • Как исправить Non-body HTTP method cannot contain @Body?

    дело в том - у GET - запросов не бывает страниц
    - замените аннотацию метода
    на @Post("/update")или @Put("/update")
    Ответ написан
    Комментировать
  • Как сделать DTO с валидацией данных в Java Spring?

    у вас импорт неправильный был вместо
    import javax.validation.Valid;
    @RestController
    public class MainController
    {
        @PostMapping("/proxy/add")
        public void saveProxy(@Valid @RequestBody ProxyDto dto) {

    надо

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    @RestController
    @RequestMapping("/proxy")
    
    public class MainController
    {
    	@RequestMapping(value = "add", method = RequestMethod.POST)
    	public Map<String, Object> addBook(@Validated @RequestBody ProxyDto dto ) {
    ....
    и
    import javax.validation.constraints.NotNull;
    public class ProxyDto {
    
    	@NotNull(message = "idbn is missing")
    	@NotEmpty(message = "idbn is empty")
    
    
     private String proxy;


    в зависимости от версии фрамеворка скажкт типа

    {
      "timestamp": 1612029070201,
      "status": 400,
      "error": "Bad Request",
      "exception": "org.springframework.web.bind.MethodArgumentNotValidException",
      "errors": [
        {
          "codes": [
            "NotNull.book.isbn",
            "NotNull.isbn",
            "NotNull.java.lang.String",
            "NotNull"
          ],
          "arguments": [
            {
              "codes": [
                "book.isbn",
                "isbn"
              ],
              "arguments": null,
              "defaultMessage": "isbn",
              "code": "isbn"
            }
          ],
          "defaultMessage": "idbn is missing",
          "objectName": "book",
          "field": "isbn",
          "rejectedValue": null,
          "bindingFailure": false,
          "code": "NotNull"
        },
        {
          "codes": [
            "NotEmpty.book.isbn",
            "NotEmpty.isbn",
            "NotEmpty.java.lang.String",
            "NotEmpty"
          ],
          "arguments": [
            {
              "codes": [
                "book.isbn",
                "isbn"
              ],
              "arguments": null,
              "defaultMessage": "isbn",
              "code": "isbn"
            }
          ],
          "defaultMessage": "idbn is empty",
          "objectName": "book",
          "field": "isbn",
          "rejectedValue": null,
          "bindingFailure": false,
          "code": "NotEmpty"
        }
      ],
      "message": "Validation failed for object='book'. Error count: 2",
      "path": "/book/add"
    }
    Ответ написан
    Комментировать
  • Почему условия поиска забирает выводимый результат?

    потому что каждый вызов find()перемещает его с текущего на следующее совпадение :
    find the first, and then for each subsequent call to find() it will move to the next match.
    поэтому findдля while а в if обычто используется matches()
    Ответ написан
    Комментировать
  • Почему docker maven не видит папку?

    мавен справедливо ругается на отсутствие pom.xml в директории в которой вы его запускаете - на скриншоте видно что pom.xml там нет. создайте и заработает
    Ответ написан
    Комментировать
  • Как проверить, что данный элемент входит в enum?

    у класса Enum
    есть статический метод чтобы узнать это
    import java.lang.Enum;
    import java.lang.IllegalArgumentException;
    
    public class EvalEnum {
    	enum MyEnum {
    		One(1), Two(2), Three(3);
    
    		private int code;
    
    		MyEnum(int code) {
    			this.code = code;
    		}
    	}
    
    	public static void main(String[] args) {
    		System.out.println(
    				String.format("%s in MyEnum? %b", args[0], isPresent(args[0])));
    	}
    
    	private static boolean isPresent(String data) {
    
    		try {
    			Enum.valueOf(MyEnum.class, data);
    			return true;
    		} catch (IllegalArgumentException e) {
    			return false;
    		}
    	}
    }

    java EvalEnum One
    One in MyEnum? true
    
    java EvalEnum Zero
    Zero in MyEnum? false
    Ответ написан
    Комментировать