Java 如何在Spring中将RequestHeader转换为自定义对象
我的控制器中有一个方法:Java 如何在Spring中将RequestHeader转换为自定义对象,java,spring,spring-mvc,Java,Spring,Spring Mvc,我的控制器中有一个方法: @RequestMapping(method = RequestMethod.POST) public CustomObject createCustomObject(final @RequestHeader("userId") Long userId) { ... } 我是否可以编写一些自定义转换器或类似的东西来将此RequestHeader userId参数转换为User对象,以便我的方法是: @RequestMapping(method = Request
@RequestMapping(method = RequestMethod.POST)
public CustomObject createCustomObject(final @RequestHeader("userId") Long userId) {
...
}
我是否可以编写一些自定义转换器或类似的东西来将此RequestHeader userId参数转换为User对象,以便我的方法是:
@RequestMapping(method = RequestMethod.POST)
public CustomObject createCustomObject(final User user) {
...
}
可以使用spring mvc吗?如果我理解您的意思,您希望接收一个参数并将其转换为复杂对象 您必须定义一个自定义DataBinder进程来实现并注册该类型 例如,如果要获取bd用户表单id,请创建类:
public class UserEditor extends PropertyEditorSupport {
private final UserDAO userDao;
public <T> CacheEditor(UserDAO userDao) {
this.userDao = userDao;
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
if (text != null && !text.isEmpty()) {
Long code = Long.parseLong(text);
setValue(userDao.getById( code));
} else {
setValue(null);
}
}
...
}
更多信息:
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
@RestController
public class SimpleController {
@GetMapping("/user")
public String greeting(@RequestHeader(name = "userId") User user) {
return "Hey, " + user.toString();
}
}
public class User {
private String id;
private String firstName;
private String lastName;
...
}
然后我们将创建一个转换器:
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
@Component
public class UserFromHeaderConverter implements Converter<String, User> {
@Override
public User convert(final String userId) {
// fetch user from the database etc.
final User user = new User();
user.setId(userId);
user.setFirstName("First");
user.setLastName("Last");
return user;
}
}
import org.springframework.core.convert.converter.converter;
导入org.springframework.stereotype.Component;
@组成部分
公共类UserFromHeaderConverter实现转换器{
@凌驾
公共用户转换(最终字符串用户ID){
//从数据库中获取用户等。
最终用户=新用户();
user.setId(userId);
user.setFirstName(“第一”);
user.setLastName(“Last”);
返回用户;
}
}
要测试它,请执行:curl--header“userId:123”localhost:8080/user
结果将是:嘿,用户{id='123',firstName='First',lastName='Last'}
版本:
springboot:2.0.3
springweb:5.0.7
@RequestHeader
注释后一个方法参数?然后,只需将String
的转换器注册到User
即可。这取决于userId
发布到服务器的方式。如果可以将用户对象作为json/xml发布,则可以使用@RequestBody
注释。发布的User
对象将包含userId
,其他所有内容都可以为空@RKodakandla它应该作为标题而不是json/xml发布。@M.Deinum不确定如何注册转换器。请提供一些教程或网址?我应该实现org.springframework.core.convert.converter.converter接口吗?请参阅和。
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
@Component
public class UserFromHeaderConverter implements Converter<String, User> {
@Override
public User convert(final String userId) {
// fetch user from the database etc.
final User user = new User();
user.setId(userId);
user.setFirstName("First");
user.setLastName("Last");
return user;
}
}