我最近将 spring boot 从 1.x 升级到 2.y,并面临这个问题,其中 hatoas 链接是使用httpschema 而不是https.
后来我发现,在 spring boot 2.2+ 中,必须使用以下属性
server.forward-headers-strategy=NATIVE
Run Code Online (Sandbox Code Playgroud)
其中可以有NATIVE或FRAMEWORK或 之一NONE。
NONE属性非常简单,它完全禁用前向标头的使用。
NATIVE但是vs没有明确的文档FRAMEWORK。我在很多地方都看到提到NATIVE在大多数情况下效果最好。但没有解释当我们使用这些属性时幕后到底发生了什么。
这里的文档没有提供足够的信息让我在 Native/Framework 之间进行选择。它只说明谁处理相应值的转发标头。Servlet 容器?还是Spring框架?但这又回到了第 1 步。我应该让容器来处理它吗?或者框架?我什么时候应该选择其中一种而不是另一种?
我正在将 REST Web 应用程序与外部 tomcat 一起使用并Hateoas生成链接。
我如何决定是否使用 NATIVE或FRAMEWORK财产?什么时候应该优先选择其中之一?为什么?
我的 springboot 版本:2.4.6
我已经尝试过的参考资料:
编辑:
我尝试了这两种解决方案并且framework对我有用,但native在外部 tomcat 环境中不起作用。我创建了一个新的 Spring Boot Web 应用程序,其中嵌入了 Tomcat,并且两者都native可以 …
到目前为止,我所知道的是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)
如是,
最后,何时或为什么我不使用findBy代替findOneBy?
据我所知,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) 我正在学习动态编程并遇到了这个著名的硬币找零问题。
解决这个问题的递归关系由下式给出
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) 我将 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)
我现在面临的问题是有一个语法错误,内容如下:
无法解析方法“类型”
该注释也不接受字符串值。
我已经检查过这个问题,但没有帮助。
最近,我一直在进行Map接口的实现java.我理解HashMap,一切都有道理.但是,当涉及到LinkedHashMap,按我所知,到目前为止,该项目有key,value,before和after.之前和之后跟踪插入顺序.
然而,使用hashcode和桶概念对我来说没有意义LinkedHashMaps.
有人可以解释一下吗?
在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)
由于两个原因,我不喜欢最后一个例子。
当异常消息是动态生成的并且基于方法参数时,在多线程环境中会失败。以下是示例。
File getFile(String filePath){
throw new FileNotFoundException("File at path: "+filePath+" was not found");
}
除了以上2个原因,还有其他原因吗?当我们创建异常的新实例时,幕后有什么事情发生吗?类似于填充异常上下文(如堆栈跟踪。但我相信当我们使用throw关键字时会发生这种情况)?
或者一直抛出一个新的异常只是一个好习惯?(再次,为什么这是一个好习惯?)
我已经完成了与此相关的所有问题,但是,我还没有找到适合我的解决方案。
我正在使用retrofit 2.8.1和OkHttp 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) 是否可以在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"
最近从 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 ×9
spring-boot ×4
hibernate ×3
algorithm ×1
coin-change ×1
collections ×1
comparable ×1
comparator ×1
exception ×1
gunicorn ×1
java-8 ×1
jpa-2.0 ×1
lambda ×1
okhttp ×1
postman ×1
rest ×1
retrofit2 ×1
sorting ×1
spring ×1
spring-data ×1
tomcat ×1