我有一个Angular 2服务,可以将登录数据发布到Spring Boot
登录请求正文:
{"_username": "test", "_password": "test"}
Rest控制器:
@RestController
public class AuthControl {
@Autowired
AuthenticationService authenticationService;
@RequestMapping(value = "/someurl", method = RequestMethod.POST)
public LoginDto authenticate(HttpServletResponse response, LoginRequestDto requestDto) throws IOException, JSONException {
return authenticationService.authenticate(requestDto, response);
}
}
Jackson将请求解编到此POJO中
public class LoginRequestDto {
private String _username;
private String _password;
public LoginRequestDto() { }
public LoginRequestDto(String u, String p) {
this._username = u;
this._password = p;
}
// getters and setters
}
但是,当Jackson解组POJO时,字段值设置为null,而不是“test”/“test”。因此,登录尝试失败,并显示错误的凭据消息。我想知道我是否缺少一个库或导致这些字段设置不正确的东西。
来自pom的依赖项。xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency><!-- implements Thymeleaf HTML5 parsing -->
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-json-org</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
t记录的唯一异常是由我实现的Spring Security的UserDetailsService引发的UsernameNotFoundException。使用调试器,我可以手动解析请求中的值,并将这些值设置到POJO中。完成此操作后,请求完成,因此问题显然处于解组阶段。
如有任何想法或建议,将不胜感激。
这是因为Jackson在反序列化时默认使用默认构造函数。您需要使用@JsonCreator
注释让jackson知道您要使用的构造函数是哪个,以及注释@JsonProperty
让它知道如何将参数与json属性绑定。
public class LoginRequestDto {
private String _username;
private String _password;
public LoginRequestDto() { }
@JsonCreator
public LoginRequestDto(@JsonProperty("_username") String u,
@JsonProperty("_password") String p) {
this._username = u;
this._password = p;
}
// getters and setters
}
请查看jackson-注解项目中的使用构造函数或工厂方法部分。
更新您的请求映射方法,指定它使用json,并将@RequestBody注释添加到方法参数
@RestController
public class AuthControl {
@Autowired
AuthenticationService authenticationService;
@RequestMapping(value = "/someurl", method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE })
public LoginDto authenticate(HttpServletResponse response, @RequestBody LoginRequestDto requestDto) throws IOException, JSONException {
return authenticationService.authenticate(requestDto, response);
}
}
对传递的 URL 发出一个 POST 请求。 使用 XMLHttpRequest web api 对给定的url 发出一个 post 请求。 用 setRequestHeader 方法设置 HTTP 请求头的值。 通过调用给定的 callback 和 responseText 来处理 onload 事件。 通过运行提供的 err 函数,处理onerror事件。 省略第三个参数 data ,不发送数
我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em
更新:为了给你更多的上下文,我计划通过使用PhoneGap将chrome扩展即时音乐移植到Android应用程序中。一些在PC上允许的YouTube视频在手机上不允许,我怀疑这是因为Android应用程序中嵌入的YouTube player没有引用者标题。我正试图找到一个解决这个问题的办法,这样我就可以在手机上播放这样的视频了。
我在swift 3中有一个项目,想提出一个GET请求。然而,Alamofire还没有更新到swift 3。何时Alamofire将支持swift 3以及如何用swift 3中的参数硬编码GET请求?
我试图使用新的SpringBoot2 Reactive WebClient类(它没有批处理endpoint)对同一个rest服务进行并行(批处理)调用。例如,我需要100个“comment”对象(ids为1...100),我正在执行以下并行调用: 我是Spring WebFlux的新手,我不确定这是否是用WebClient进行并行调用的正确方法 > 有没有更好(更合适)的方法来做这件事(即做一个单
要获取请求URL,可以在堆栈溢出中找到以下方法。 第一种方法: 第二种方法: 第三种方法: 我不知道在spring boot应用程序中使用哪一个来获取请求URL。 如果我使用第三种方法,那么我是否需要在配置类中创建RequestContextListener的bean,如下所示?