- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有双字段的表单。当我添加一个不是 Double ('foo') 的值时,它应该给我一个 BeanPropertyBindingResult ,其中包含该字段的错误。但我得到了一个HttpMessageNotReadableException
。
奇怪的是,从我的 JUnit 测试中我确实得到了 BeanPropertyBindingResult
这是我的代码(我尝试专注于我认为需要的内容,如果需要更多,我会提供它)。
我有一个 Angular 前端:
首先这是我从 Angular 得到的错误:
2018-05-22 11:28:59.143 WARN 1262 --- [ XNIO-8 task-4] o.z.p.spring.web.advice.AdviceTrait : Bad Request: JSON parse error: Can not deserialize value of type java.lang.Double from String "dddddddd": not a valid Double value; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.lang.Double from String "dddddddd": not a valid Double value at [Source: java.io.PushbackInputStream@36d5105f; line: 1, column: 1294] (through reference chain: nl.tibi.sbys.service.dto.ProjectDTO["travelRate"]) 2018-05-22 11:28:59.146 WARN 1262 --- [ XNIO-8 task-4] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not deserialize value of type java.lang.Double from String "dddddddd": not a valid Double value; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.lang.Double from String "dddddddd": not a valid Double value at [Source: java.io.PushbackInputStream@36d5105f; line: 1, column: 1294] (through reference chain: nl.tibi.sbys.service.dto.ProjectDTO["travelRate"])
当我运行 junit 测试中的代码时,我得到了这个,这是我认为最好的:
2018-05-22 11:32:00.516 WARN 18426 --- [ main] o.z.p.spring.web.advice.AdviceTrait : Bad Request: org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'projectDTO' on field 'travelRate': rejected value [3,5]; codes [typeMismatch.projectDTO.travelRate,typeMismatch.travelRate,typeMismatch.java.lang.Double,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [projectDTO.travelRate,travelRate]; arguments []; default message [travelRate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Double' for property 'travelRate'; nested exception is java.lang.NumberFormatException: For input string: "3,5"]
我的 Angular 代码发送如下:
update( project: Project ): Observable<EntityResponseType> {
const copy = this.convert( project );
return this.http.put<Project>( this.resourceUrl, copy, { observe: 'response' } )
.map(( res: EntityResponseType ) => this.convertResponse( res ) );
}
我的junit测试是这样的:
restMockMvc.perform(post(url()).param("travelRate", "3,5").param("name", "name")).andExpect(status().isUnprocessableEntity());
我的方法(由于十进制值错误而未达到):
@PostMapping()
@Timed
public ResponseEntity<ProjectDTO> createProject(@Valid ProjectDTO projectDTO) throws URISyntaxException {
log.debug("REST request to save Project : {}", projectDTO);
....
}
如何从 Angular 获得与 JUnit 测试相同的结果?即如何获得 BeanPropertyBindingResult?
我的解决方法可以是添加 ExceptionHandler 并解析字符串消息并自己创建 BeanPropertyBindingResult
最佳答案
消息很明确:无法将字符串参数转换为 Double
属性。
请求正文读取器发生在 Bean 验证逻辑之前,因此不会发生 BeanPropertyBindingResult
异常。
如果您想验证输入是否正确为 double ,则必须在 DTO 中将其声明为 String
并使用自定义 validator 对其进行验证:
public class ProjectDTO {
@Double
String travelRate;
}
这里@Double
是您的自定义 validator 。这很容易实现。
关于java - HttpMessageNotReadableException 而不是 BeanPropertyBindingResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464616/
我有一个带有双字段的表单。当我添加一个不是 Double ('foo') 的值时,它应该给我一个 BeanPropertyBindingResult ,其中包含该字段的错误。但我得到了一个HttpMe
嗨,我是 Spring 框架的新手。我做了一个小例子,我尝试使用 spring 验证 api 验证我的输入字段。这是代码 @RequestMapping(value = "/applicationFo
您好,我尝试将 bean 中的数组从 jsp 传递到 java。 @ModelAttribute("areasActividadAdminBean")AreasActividadAdminBean a
我在将航类信息保存到 mysql 数据库时遇到错误。请帮助我下面是我的代码: 我已经尝试了所有方法,添加模式和这么多 它不会从字符串转换为日期 控制台日志 2020-05-12 13:19:21.04
我是一名优秀的程序员,十分优秀!