下面是一个HTTP请求对象,它捕获从用户到SpringBoot应用程序的json输入。
package com.bablo.google.request;
import java.io.Serializable;
import java.util.Set;
import javax.validation.constraints.NotNull;
public class SomeRequest implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@NotNull
private Long userId;
private String resNote; //this is not annotated with @NotNull
@NotNull
private String revTag;
public Long getUserId() {
return userId;
}
public void setUserId(final Long userId) {
this.userId = userId;
}
public String getResNote() {
return responseNote;
}
public void setResNote(final String resNote) {
this.resNote = resNote.trim(); //Call to trim() method of the String object.
}
public String getRevTag() {
return revTag;
}
public void setRevTag(final String revTag) {
this.revTag = revTag.trim(); //Call to the trim() method of the String object.
}
}
是否可以在setter方法中修剪带有@NotNull验证注释的类的字符串字段?
这里,revTag字段用@NotNull注释,并在setter方法中被修剪,在这种情况下,如果传入的请求对象将null作为revTag值,它会抛出NullPointerException吗?在这种情况下会发生什么?
resNote字段未使用@NotNull进行注释,如果resNote的null值为空,则肯定会引发NullPointerException。
由于Hibernate的某个版本,因此有可用的方法级验证,注释可以放在方法的正式参数中:
@NotNull
private Long userId;
private String resNote;
...
public String setResNote(@NotNull final String resNote) {
this.resNote = resNote.trim()
}
我们可以安全地在setter方法中修剪,因为如果revTag值不存在于请求中,则与对象本身的绑定将失败。
注意:@有效注释应添加到控制器中的请求处理方法中,以启用数据绑定验证。
控制器下方
@RestController
public class DemoController {
@GetMapping("/demo/req")
public ResponseEntity handleSomeGetRequest(@Valid SomeRequest someRequest){
return ResponseEntity.ok("success");
}
}
@WebMvcTest(value = DemoController.class)
class DemoControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testNotNullValidation() throws Exception {
//invoking the endpoint without any request param and this throws BadRequest
mockMvc.perform(MockMvcRequestBuilders.get("/demo/req"))
.andExpect(MockMvcResultMatchers.status().isBadRequest());
}
}
Error in the log trace.
2020-05-19 22:34:18.509 WARN 9276 --- [ Test worker] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'someRequest' on field 'userId': rejected value [null]; codes [NotNull.someRequest.userId,NotNull.userId,NotNull.java.lang.Long,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [someRequest.userId,userId]; arguments []; default message [userId]]; default message [must not be null]
Field error in object 'someRequest' on field 'revTag': rejected value [null]; codes [NotNull.someRequest.revTag,NotNull.revTag,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [someRequest.revTag,revTag]; arguments []; default message [revTag]]; default message [must not be null]]
是否可以在操作中发布IFormCollection和Object? 我尝试从Angular向WebAPI发出post请求,请求是上传文件和模型的组合。 角度代码: 如何实现这个WebAPI? 更新:我正在考虑将所有内容添加到FormCollection中,但这对于解析数据来说是非常糟糕的代码
这个问题现有两种变体: 仅当字段不为空时验证:有条件地处理字符串的解决方案 Hibernate验证-仅在对象不为null时进行验证:唯一的答案演示了该行为,并提示您在手动触发验证时如何处理该行为 我的问题添加了限定符,即在可能为空的对象上使用@Valid时如何执行此操作。 这里的用例是,我们有两个字段,其中一个或另一个需要不为null(包含字段的类上的自定义验证器)。当一个不为null时,我需要它
问题内容: 我继承了在getter / setter上具有@JsonProperty批注的某些位代码。目的是当使用Jackson库序列化对象时,字段具有该特定名称。 当前代码: 现在,对于另一个工具,我还需要使用JsonProperty对该字段进行注释。因此,这将是我更改的代码: 是否有人在字段和获取器/设置器上都使用了相同的注释?我在网上四处张望,却什么也没看见。 我已经编译并运行了代码,但是我
问题内容: 我继承了在getter / setter上具有@JsonProperty批注的某些位代码。目的是当使用Jackson库序列化对象时,字段具有该特定名称。 当前代码: 现在,对于另一个工具,我还需要使用JsonProperty对该字段进行注释。因此,这将是我更改的代码: 是否有人在字段和获取器/设置器上都使用了相同的注释?我在网上四处张望,却什么也没看见。 我已经编译并运行了代码,但是我
问题内容: 在Flask中,需要从服务器端发出POST请求。 假设我们有: 我没有在Flask文档中找到任何特定的东西。有人说是问题所在,但我未能将Flask和。真的有可能吗? 提前致谢! 问题答案: 是的,要发出POST请求,您可以使用,请参阅文档。 但是,我建议改用requests模块。 编辑 : 我建议您重构代码以提取常用功能:
我正在开发一个现有的Java代码库,该代码库使用Guice进行依赖注入。我有一个新的类 Foo,其中包含一个我想注入的成员字段(bar)。喜欢这个: 然而,有两件事: 使用Foo的注射器无法直接进入 客户端希望使用“new”创建Foo 当客户端执行以下操作时,是否仍然可以将Bar注入Foo对象: 我对DI和Guice非常陌生,不太明白如何在不调用injector.createInstance()的