Rumah > Soal Jawab > teks badan
Hello semua, saya ada soalan
1
spring 4.3.7
hibernate-validator-5.4.1
2. Konfigurasi adalah seperti berikut
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource" name="messageSource">
<property name="basenames">
<list>
<value>classpath:messages/messages</value>
<value>classpath:messages/ValidationMessages</value>
</list>
</property>
<property name="useCodeAsDefaultMessage" value="false" />
<property name="defaultEncoding" value="UTF-8" />
<property name="cacheSeconds" value="60" />
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<property name="validationMessageSource" ref="messageSource"/>
</bean>
<mvc:annotation-driven validator="validator" />
3.kacang dan Pengawal
public class UserRequest {
@NotBlank(message = "{login.valid.username.notnull}")
private String username;
@NotBlank(message = "{login.valid.password.notnull}")
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
public Object login(@Valid @RequestBody UserRequest ur, BindingResult result, HttpServletRequest request) {
log.debug("login");
if(result.hasErrors()) {
return result.getAllErrors().get(0);
}
……
}
Soalan: Mengapa kita mesti menggunakan result.hasErrors() untuk memaparkan pertimbangan dalam kod?
Bukankah lebih munasabah untuk mengesahkan bahawa medan dalam UserRequest tidak memenuhi definisi dan hanya membuang pengecualian secara langsung?
天蓬老师2017-06-23 09:15:55
Soalan:
Mengapa kita mesti menggunakan result.hasErrors() untuk memaparkan pertimbangan dalam kod?
Bukankah lebih munasabah untuk mengesahkan bahawa medan dalam UserRequest tidak memenuhi definisi dan hanya membuang pengecualian secara langsung?
Sebagai contoh, apabila pengecualian parameter berlaku, perkara yang kami kembalikan ke bahagian hadapan ialah nama parameter khusus dan perihalan pengecualian, bukan semua maklumat pengecualian yang diberikan oleh Spring Jika Spring secara automatik membuang pengecualian, maka ia adalah sukar untuk anda untuk mengawal maklumat yang dikembalikan.
@PostMapping(UriView.REST_KNOWLEDGE_POINTS)
@ResponseBody
public Result createKnowledgePoint(@Valid KnowledgePoint knowledgePoint, BindingResult bindingResult) {
// 如有参数错误,则返回错误信息给客户端
if (bindingResult.hasErrors()) {
return Result.fail(CommonUtils.getBindingMessage(bindingResult));
}
knowledgePoint.setKnowledgePointId(CommonUtils.uuid());
knowledgePoint.setName(knowledgePoint.getName().trim());
mapper.createKnowledgePoint(knowledgePoint);
return Result.ok("", knowledgePoint);
}
/**
* BindingResult 中的错误信息很多,对用户不够友好,使用 getBindingMessage()
* 提取对用户阅读友好的定义验证规则 message。
*
* @param result 验证的结果对象
* @return 验证规则 message
*/
public static String getBindingMessage(BindingResult result) {
StringBuffer sb = new StringBuffer();
for (FieldError error : result.getFieldErrors()) {
// sb.append(error.getField() + " : " + error.getDefaultMessage() + "\n");
sb.append(error.getDefaultMessage() + "\n");
}
return sb.toString();
}
三叔2017-06-23 09:15:55
Anda hanya pertimbangkan mengapa dalam senario aplikasi anda Satu rangka kerja lebih kepada mempertimbangkan perkara yang paling munasabah pada kebanyakan masa.
Kebanyakan pengesahan data pelanggan tidak boleh dianggap sebagai "keabnormalan", tetapi ralat yang dibenarkan dilakukan oleh pengguna tanpa mengetahuinya.