- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是在玩 spring-boot,只是想用 method = RequestMethod.POST
创建一个 Controller
我的 Controller :
@RequestMapping(value = "/user/signup",
method = RequestMethod.POST)
private String signUpNewUser(@Valid @RequestBody SignInUserForm userForm){
// validation + logic
}
SignUpUserForm 类:
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class SignInUserForm {
@NotEmpty
@Email
private String email;
@NotEmpty
@Size(min = 8, max = 24)
private String password;
@NotEmpty
@Size(min = 8, max = 24)
private String repeatedPassword;
}
最后是我的测试:
@Test
public void shouldCallPostMethod() throws Exception {
SignInUserForm signInUserForm = new SignInUserForm("test@mail.com", "aaaaaaaa", "aaaaaaaa");
String json = new Gson().toJson(signInUserForm);
mockMvc.perform(
MockMvcRequestBuilders.post("/user/signup")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(json))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isCreated());
}
就 SignUpControllerForm 包含无参数构造函数而言,一切正常,但是一旦缺少,这就是我从 MockMvcResultHandlers.print()
收到的内容:
MockHttpServletRequest:
HTTP Method = POST
Request URI = /user/signup
Parameters = {}
Headers = {Content-Type=[application/json]}
Handler:
Type = org.bitbucket.akfaz.gui.controller.SignUpController
Method = private java.lang.String org.bitbucket.akfaz.gui.controller.SignUpController.signUpNewUser(org.bitbucket.akfaz.gui.model.SignInUserForm)
Async:
Async started = false
Async result = null
Resolved Exception:
Type = org.springframework.http.converter.HttpMessageNotReadableException
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
MockHttpServletResponse:
Status = 400
Error message = null
Headers = {}
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []
我想表达的是,异常HttpMessageNotReadableException
描述性不够。 @RequestBody 不应该有任何异常吗?这会节省很多时间。
Spring 究竟是如何使用无参数构造函数将 JSON 转换为 java 对象(正如我检查的那样,它不使用 getters)?
最佳答案
正如@Sotitios所说,您可以启用调试日志,您可以通过将logback.xml(它也可以是groovy)添加到资源文件夹来实现此目的。这是我的
<configuration>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>logFile.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>5</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} -
%msg%n</Pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
关于无参数构造函数的问题,您可以创建自己的构造函数并强制 jackson 使用它,我相信这是一个很好的做法,因为您可以更好地控制可变性
@JsonCreator
public UserDto(
@JsonProperty("id") Long id,
@JsonProperty("firstName") String firstName,
@JsonProperty("lastName") String lastName,
@JsonProperty("emailAddress") String emailAddress,
@JsonProperty("active") boolean active,
@JsonProperty("position") String position,
@JsonProperty("pendingDays") Integer pendingDays,
@JsonProperty("taxUid") String taxUid,
@JsonProperty("userName") String userName,
@JsonProperty("approver") boolean approver,
@JsonProperty("startWorkingDate") Date startWorkingDate,
@JsonProperty("birthDate") Date birthDate){
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.taxUid = taxUid;
this.userName = userName;
this.emailAddress = emailAddress;
this.pendingDays = pendingDays;
this.position = position;
this.active = active;
//this.resourceUrl = resourceUrl;
this.isApprover = approver;
this.birthDate = birthDate;
this.startWorkingDate = startWorkingDate;
}
希望这有帮助
关于java - 为什么@RequestBody不需要arg构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975715/
当我定义 requestBody 时,它不会显示在 swagger 文档中。我想为 swagger 中的 gpx 文件创建一组图像和单个文件上传。如何才能实现 requestBody 像参数属性一样显
我正在使用 Spring 4.x 做 Spring Rest Api 项目 这有效: Controller.java @PostMapping("newTransaction") Transactio
我正在向服务器发送一个 JSON 对象,该服务器将填充我的域对象报告。 public class CustomReport {String name; String name; String emai
我有一个非常琐碎的问题,它占用了我很多时间。 我有一个 Spring Rest 服务,它接受 @RequestBody 中的模型对象。我在模型对象中传递的是格式为 yyyy-MM-dd'T'HH:mm
我一直在开发 Spring Boot Rest api 服务,这是我的 Rest Controller 方法之一: @RequestMapping(value = "manager", method
我使用 Spring Boot 2.0.8.RELEASE。 我有一个 @RestController 方法,如下所示: @PostMapping("/message") public
类(class): class Person { private String name; private List addr; } c
我有以下类作为我的@RequestBody,但我无法发送我的请求,我尝试以不同的格式准备 JSON,但它们都不起作用。 处理程序 @RequestMapping("/grades") @Respons
@PatchMapping("/update") HttpEntity updateOnlyIfFieldIsPresent(@RequestBody Person person) { if(
我正在尝试使用 apache 集合中的 MultiValueMap(MultiMap 的实现)。我正在使用 Spring MVC 的 @RequestBody 注释。但是,我不断收到 HTTPMedi
Requestbody 没有映射到我在这里使用的对象。 PaymentRequest 中的所有字段都为空。我看到注释和映射一切似乎都是正确的。 @RestController @RequestMapp
假设以下 JSON: { "attr_A": "val_A", "array_A": [{ "attr_B": "val_B" }] } 以及以下两个类: public class C
JavaScript 代码: function deleteMarks(list){ $http.post('/api/marks/delete/all',list).then( fu
我是 Java/Spring 的新手,正在尝试在现有项目中设置 API 端点。我基本上已经复制了一些当前正在工作的其他端点,但我的端点在被击中时没有验证,这似乎是因为 @RequestBody 没有填
我正在使用 postman 来测试我的请求。所以我从 postman 那里选择了显示代码 fragment 的选项并选择了 OkHttp fragment 是: OkHttpClient client
我使用 Spring-boot 2.0.1 和 WebFlux 作为 Rest 服务器。 在我的 RestController 中,我想自动反序列化一个对象(产品)。但我收到 Jackson 错误,就
我创建了一个简单的 REST 服务 (POST)。但是当我从 postman 那里调用这个服务时,@RequestBody 没有收到任何值。 import org.springframework.ht
PostMan传参给@RequestBody(接受前端参数) 今天新接手一个项目框架,需要改造,但后台写好方法,准备用postman 测试时候,发现用以前传参方式不行,需要需要将json字符串转成
springmvc @RequestBody String类型参数 通过如下配置: <bean id="mappingJacksonHttpMessageConverter&qu
目录 SpringMVC @RequestBody为null 关于inputsteam的一些理解 @RequestBody 自动映射原理的简单介
我是一名优秀的程序员,十分优秀!