小编Aru*_*wda的帖子

Spring server.forward-headers-strategy NATIVE 与 FRAMEWORK

我最近将 spring boot 从 1.x 升级到 2.y,并面临这个问题,其中 hatoas 链接是使用httpschema 而不是https.

后来我发现,在 spring boot 2.2+ 中,必须使用以下属性

server.forward-headers-strategy=NATIVE
Run Code Online (Sandbox Code Playgroud)

其中可以有NATIVEFRAMEWORK或 之一NONE

NONE属性非常简单,它完全禁用前向标头的使用。

NATIVE但是vs没有明确的文档FRAMEWORK。我在很多地方都看到提到NATIVE在大多数情况下效果最好。但没有解释当我们使用这些属性时幕后到底发生了什么。

这里的文档没有提供足够的信息让我在 Native/Framework 之间进行选择。它只说明谁处理相应值的转发标头。Servlet 容器?还是Spring框架?但这又回到了第 1 步。我应该让容器来处理它吗?或者框架?我什么时候应该选择其中一种而不是另一种?

我正在将 REST Web 应用程序与外部 tomcat 一起使用并Hateoas生成链接。

我如何决定是否使用 NATIVEFRAMEWORK财产?什么时候应该优先选择其中之一?为什么?

我的 springboot 版本:2.4.6

我已经尝试过的参考资料:

编辑:

我尝试了这两种解决方案并且framework对我有用,但native在外部 tomcat 环境中不起作用。我创建了一个新的 Spring Boot Web 应用程序,其中嵌入了 Tomcat,并且两者都native可以 …

java spring tomcat spring-hateoas spring-boot

30
推荐指数
1
解决办法
3万
查看次数

Spring数据JPA中findBy和findOneBy之间的区别

到目前为止,我所知道的是FindBy可以返回多个结果,而FindOneBy将返回单个结果,或者当我们按照以下方式使用它时为null.

List<Department> findByDepartmentName(String name);
Department findOneByDepartmentId(Long Id);
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,我可以用这种方式使用findBy吗?

Department  findByDepartmentId(Long Id);
Run Code Online (Sandbox Code Playgroud)

如是,

  • 让我们假设给定Id有多个记录.
  • 在什么基础上findBydepartmentId 返回单一记录?

最后,何时或为什么我不使用findBy代替findOneBy?

java hibernate jpa-2.0 spring-data-jpa spring-boot

16
推荐指数
3
解决办法
2万
查看次数

比较器.comparing()。reversed()异常行为/未按预期工作

据我所知,Comparator.comparingInt()应按升序排序,并Comparator.comparingInt().reversed应按降序排序。但是我发现了一种相反的情况。

用一个例子可以更好地解释这一点。以下是我的代码。

金额等级:

class Amount
{
    int lineNum;
    int startIndex;
    Double value;
//Getters , setters and toString.
}
Run Code Online (Sandbox Code Playgroud)

主要方法:

public static void main( String[] args )
{
    List<Amount> amounts = new ArrayList<>();
    amounts.add( new Amount( 1.0, 5, 10 ) ); //LINE_NUM 5
    amounts.add( new Amount( 3.0, 9, 30 ) );
    amounts.add( new Amount( 2.0, 3, 40 ) );
    amounts.add( new Amount( 9.0, 5, 20 ) ); //LINE_NUM 5
    amounts.add( new Amount( 6.0, 1, 50 ) ); …
Run Code Online (Sandbox Code Playgroud)

java sorting lambda comparable comparator

6
推荐指数
1
解决办法
326
查看次数

硬币找零问题动态规划解的思考过程

我正在学习动态编程并遇到了这个著名的硬币找零问题

解决这个问题的递归关系由下式给出

countCoinsChangeRec(arr, sum - arr[i], i) + countCoinsChangeRec(arr, sum, i - 1);

优化问题的最简单方法是存储子问题的解。所以我Map为 的每个值维护了一个(sum,i)。不再解决同样的问题。

        String key = sum + ":" + i;    
        Integer memoizedVal = results.get(key);
        if (memoizedVal != null) {
            return memoizedVal;
        }
Run Code Online (Sandbox Code Playgroud)

下一级优化是有一个二维表,n X sum其中 n 是集合中的元素数。

(arr, sum - arr[i], i)转化为DP[sum-arr[i]]同一行的递归关系很容易理解。(因为i是相同的)

(arr, sum, i - 1)转换为DP[i-1](列中的上一行sum)。

带有 2D 矩阵的完整解决方案如下所示。

public static int countWaysDP2D(int[] arr, int sum) …
Run Code Online (Sandbox Code Playgroud)

algorithm dynamic-programming coin-change

5
推荐指数
1
解决办法
347
查看次数

迁移到 Hibernate 6 @Type 注释不适用于布尔值

我将 spring boot 升级到 3.x,这又将 Hibernate 从 5 升级到 6 和 spring 6。

在以前的版本中,我们使用@Type注释将 db 列从字符串(Y 或 N)转换为 java 布尔值。

    @Column(name = "IS_SPECIAL")
    @Type(type = "yes_no")
    private Boolean isSpecial;
Run Code Online (Sandbox Code Playgroud)

我现在面临的问题是有一个语法错误,内容如下:

无法解析方法“类型”

该注释也不接受字符串值。

我已经检查过这个问题,但没有帮助。

java hibernate spring-data spring-boot hibernate-6.x

5
推荐指数
1
解决办法
3191
查看次数

为什么我们在LinkedHashMap中需要hashcode和bucket概念

最近,我一直在进行Map接口的实现java.我理解HashMap,一切都有道理.但是,当涉及到LinkedHashMap,按我所知,到目前为止,该项目有key,value,beforeafter.之前和之后跟踪插入顺序.

然而,使用hashcode和桶概念对我来说没有意义LinkedHashMaps.

我阅读了本文以了解linkedHashMaps的实现

有人可以解释一下吗?

java collections linkedhashmap data-structures java-8

4
推荐指数
1
解决办法
144
查看次数

为什么我们总是要抛出新的异常?我们可以不将该异常存储为实例变量并每次都抛出相同的实例吗?

在java中,到目前为止我看到的是,每当我们抛出异常时,我们都会抛出新的异常。像下面的例子。

try{
    somethingThatCanGoWrong();
}catch(Exception e){
    throw new FailedToDoSomethingException("The other guy failed");
}
Run Code Online (Sandbox Code Playgroud)

是否总是需要抛出一个新的异常实例?我可以通过以下方式做到吗?

public class Blah
{
    private static final FailedToDoSomethingException failedToDoSomethingException = new FailedToDoSomethingException(
        "The other guy failed" );

    public static void main( String[] args )
    {
        try {
            somethingThatCanGoWrong();
        } catch ( Exception e ) {
            throw failedToDoSomethingException;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

由于两个原因,我不喜欢最后一个例子。

  1. 面向对象,任何 Exception 既不是 Class 的属性,也不是实例的属性。
  2. 当异常消息是动态生成的并且基于方法参数时,在多线程环境中会失败。以下是示例。

    File getFile(String filePath){

    throw new FileNotFoundException("File at path: "+filePath+" was not found");

    }

除了以上2个原因,还有其他原因吗?当我们创建异常的新实例时,幕后有什么事情发生吗?类似于填充异常上下文(如堆栈跟踪。但我相信当我们使用throw关键字时会发生这种情况)?

或者一直抛出一个新的异常只是一个好习惯?(再次,为什么这是一个好习惯?)

java error-handling exception

4
推荐指数
1
解决办法
89
查看次数

改造 POST java.io.IOException:由 java.io.EOFException 引起的连接上的流意外结束:\n 未找到:

我已经完成了与此相关的所有问题,但是,我还没有找到适合我的解决方案。

我正在使用retrofit 2.8.1OkHttp 4.5.0

我的服务界面如下所示

public interface MlApiService
{
    @POST
    @Multipart
    Call<List<PreprocessedDocument>> postDocument( @Url String apiUrl, @Part MultipartBody.Part document,
    @Part ( "document_id") RequestBody documentId );
}
Run Code Online (Sandbox Code Playgroud)

我构建了客户端,如下所示,requestTimeoutInSeconds设置为 90 秒。

public void init()
{
    GsonBuilder gson = new GsonBuilder();
    gson.registerTypeAdapter( new TypeToken<List<PreprocessedDocument>>() {}.getType(), new CustomResponseDeserializer() );

    HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor();
    logInterceptor.setLevel( HttpLoggingInterceptor.Level.HEADERS );

    OkHttpClient client = new OkHttpClient.Builder().retryOnConnectionFailure( true ).addInterceptor( logInterceptor )
        .readTimeout( requestTimeoutInSeconds, TimeUnit.SECONDS ).build();
    //Dummy Base URL must be provided. otherwise client …
Run Code Online (Sandbox Code Playgroud)

java gunicorn okhttp retrofit2

4
推荐指数
1
解决办法
4575
查看次数

如何在GET调用中将map作为请求参数发送

是否可以在GET调用中将map作为参数发送.我搜索,我可以找到列表和集合.但没有找到任何地图收集.

我尝试了以下,我的控制器方法看起来像这样.

@GetMapping("/test")
    public ResponseEntity<?> mapTest(@RequestParam Map<String,String> params) {

        LOG.info("inside test with map  "+  params );

        return new ResponseEntity<String>("MAP", HttpStatus.OK);
    }
Run Code Online (Sandbox Code Playgroud)

我发了邮递员的以下要求

http://localhost:8080/test?params={a:abc,b:bcd}
Run Code Online (Sandbox Code Playgroud)

一切正常,没有错误和例外.但是我收到的地图看起来像key=params , value={a:abc,b:bcd}

我希望收到的地图就像 key1="a" value1=abc ,key2="b" value2="bcd"

java rest model-view-controller spring-boot postman

3
推荐指数
1
解决办法
6590
查看次数

HHH000513:升级到 Hibernate 6 后无法为实体创建 ReflectionOptimizer

最近从 Hibernate 5 升级到 6,我在调试级别看到以下错误。

12:36:11.892 [main] DEBUG org.hibernate.bytecode.internal.bytebuddy.BytecodeProviderImpl - HHH000513: Unable to create the ReflectionOptimizer for [abc.def.ghi.OrderEventEntity]
org.hibernate.bytecode.internal.bytebuddy.PrivateAccessorException: private accessor [createdTime]
    at org.hibernate.bytecode.internal.bytebuddy.BytecodeProviderImpl.findAccessors(BytecodeProviderImpl.java:1250) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
Run Code Online (Sandbox Code Playgroud)

订单实体.java

@Data
@Entity
@Table(name = "OMS_ORDER_EVENTS")
public class OrderEventEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "oms_order_events_seq")
    @SequenceGenerator(name = "oms_order_events_seq", sequenceName = "OMS_ORDER_EVENTS_SEQ", allocationSize = 1)
    @Column(name = "ID")
    private Long id;

    @Column(name = "ORDER_ID")
    private Long orderId;

    @Column(name = "VERSION_NUMBER")
    private Integer versionNumber;

    @Column(name = "GENERATED_BY")
    @Enumerated(value = EnumType.STRING)
    private EventGenerator generatedBy;

    @Column(name = …
Run Code Online (Sandbox Code Playgroud)

java hibernate hibernate-6.x

3
推荐指数
1
解决办法
2895
查看次数