@PostMapping("/searchCarBigList")
public ResponseEntity<Cars> searchBigList(
@Parameter(description = "some searchRequest dto") @RequestBody SearchRequest searchRequest) {
return ResponseEntity.ok(someService.search(searchRequest));
}
@PostMapping("/searchCarSmallList")
public ResponseEntity<Cars> searchSmallList(
@Parameter(description = "some searchRequest dto") @RequestBody SearchRequest searchRequest) {
return ResponseEntity.ok(someService.search(searchRequest));
}
@Table(name = "CAR_TABLE")
public class Cars {
@Id
@Column(name = "ID")
private Long id;
@Column(name = "BRAND", nullable = false)
private String brand;
@Column(name = "COUNTRY", nullable = false)
private String country;
@Column(name = "CLIENT", nullable = false)
private String client;
@Column(name = "TRANSMISSION", nullable = false)
private String transmission;
Getters and Setters
}
我有两个endpoint使用相同的模型类(Cars)。对于search chBigListendpoint,我想检索所有汽车字段,而对于search chCarSmallListendpoint,我想只检索3个字段。我尝试使用@JsonView
注释来做到这一点,但它对我不起作用。有人知道如何做到这一点吗?
我完全同意托德·哈特的观点,即使用DTO更好、更容易。
尽管如此,我不知道您是如何尝试使用@JSonView注释的。我在一些DTO中使用它。让@JsonView注释工作的一种方法是首先创建一个接口。即。:
public interface Views {
public static interface Simple {
}
public static interface Detailed extends Simple {
}
...
}
然后您需要引用要应用它们的字段上方的视图,如下所示:
@JsonView(Views.Simple.class)
private String someField;
@JsonView(Views.Detailed.class)
private String anotherField;
...
之后,需要将实体对象转换为MappingJacksonValue,如下所示:
...
var responseObject = new MappingJacksonValue(obj);
responseObject.setSerializationView(Views.Simple.class);
...
这是使@JsonView注释按预期工作的方法之一。然而,只使用DTO并将实体转换为您创建的适当响应DTO要容易得多(也更好)。您可以制作任意数量的DTO。使用DTO映射请求主体也是一个好主意。这样,您可以轻松控制请求体中允许哪些字段,即POST/PUT/PATCH请求。看看ModelMapper和/或ObjectMapper类。这些可以用于在DTO之间转换实体。
您可以有一个只有3个基本字段的汽车模型类。这个对象可以用于任何只需要这3个字段的web服务。
在您的情况下,searchCarSmallListendpoint。
扩展车型类
在另一个endpoint中访问这个新类,该endpoint需要所有5个字段。
如果上述方法不可行,则使用
小坚果。copyProperties,其中可以明确提及在显示/返回之前要忽略的字段名。
使用JPA实体作为DTO是一个坏主意,因为一旦进入任何更复杂的模式,就会遇到与分离实体和延迟计算等相关的问题。
您的控制器应该只处理具有所需属性的单独DTO类对象,然后您可以将其构建为您想要的样子。服务层接口应该只提及这些DTO,而不是实体类。
只有存储库层应该按照实体类编写,因此服务层应该在DTO和实体之间进行转换(接受并返回DTO,将实体传递给repo层)。
最终,这将为你节省大量的时间和痛苦的任何现实世界类型的项目。有很多工具和习惯用法用于处理DTO
当我在输入字段中输入object fields值时,我想从ArrayList中删除一个对象。 我有一个超类,我将添加不同米的一般信息。 然后我有一个时钟类,它扩展了超类,并有更多的值。 然后我有一个archive类,它创建了一个arrayList,其中包含不同的对象,并且当用户收到一个字段的提示时,会有一个删除对象的方法,在该字段中,他们可以将“regNum”作为字符串键入。 然后计划是,它迭代列
问题内容: 我有一个具有静态对象ArrayList的ClassA 现在,我要像这样从此列表中删除一个对象 这是用Meteorit类编写的。但是,当我想使用ArrayList中的对象时,它将引发异常。 我使用Iterator从ArrayList中删除对象,但是现在我不知道如何在这种情况下使用它。 问题答案: 这是因为某个线程实际上正在for每个循环中查看此列表,也许您正在尝试在for-each主体中
基本上,我不希望在生成的JSON文件中出现任何空的JSON数组或对象。我已经使用以下方法相应地配置了ObjectMapper: 这适用于数组、集合和字符串。但是,如果我有一个空对象(=所有属性都为null或empty),它仍然会显示在生成的JSON中,如下所示:
问题内容: 我有一个(尽管我猜这个问题也适用于其他集合)对象。据我了解,当文档讨论删除映射时,那么它就是从哈希表中删除条目,即不一定破坏实际对象。如果该表中唯一剩余的对该对象的引用,那么该对象会被垃圾回收吗? 如果我这样做了,并且表中的那些对象没有在其他任何地方引用,它们会被垃圾回收吗? 最快的方法是实际从表中删除所有条目,同时销毁那些对象。 问题答案: 是的,如果集合是最后引用这些对象的地方,则
问题内容: 如果满足条件,我需要从中删除一些对象,我想知道哪种方法会更有效。 情况如下:我有一个包含包含其他一些对象的类。我必须对此进行迭代,并删除满足特定条件的所有元素。据我所知,这些是我要删除的选项: 创建一个新的并添加不符合条件的元素。迭代之后,从旧的数组列表交换到没有元素的新数组列表。 创建一个新的并添加满足条件的元素。迭代后,使用传递要删除对象的方法。 有没有更有效的方法从中删除对象?
问题内容: 如何从数组中删除对象?我想删除,其中包括名称的对象从。例如: 我要实现: 问题答案: 您可以使用多种方法从数组中删除项目: 如果要删除position处的元素,请使用: 要么 您可以使用或结合使用参见MDN从数组中删除一个或多个元素,例如