大佬教程收集整理的这篇文章主要介绍了如何编写一个RestController来从XML请求更新JPA实体,Spring Data JPA方式?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
id | first_name | last_name | date_of_birth ----|------------|-----------|--------------- 1 | Tin | Tin | 2000-10-10
@H_618_7@有一个名为Person的JPA实体映射到此表:
@Entity @XmlRootElement(name = "person") @XmlAccessorType(NONE) public class Person { @Id @GeneratedValue private Long id; @XmlAttribute(name = "id") private Long externalId; @XmlAttribute(name = "first-name") private String firstName; @XmlAttribute(name = "last-name") private String lastName; @XmlAttribute(name = "dob") private String dateOfBirth; // setters and getters }
@H_618_7@该实体还使用JAXB注释进行注释,以允许XML有效负载
要映射到实体实例的http请求.我想实现一个端点来检索和更新具有给定id的实体.
根据this answer to a similar question,
我需要做的就是实现如下的处理程序方法:
@RestController @requestMapping( path = "/persons",consumes = APPLICATION_XML_VALUE,produces = APPLICATION_XML_VALUE ) public class PersonController { private final PersonRepository personRepository; @Autowired public PersonController(final PersonRepository personRepository) { this.personRepository = personRepository; } @PutMapping(value = "/{person}") public Person savePerson(@modelattribute Person person) { return personRepository.save(person); } }
@H_618_7@但是,这不能按预期工作,因为可以通过以下失败的测试用例进行验证:
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = RANDOM_PORT) public class PersonControllerTest { @Autowired private TestRestTemplate restTemplate; private httpHeaders headers; @Before public void before() { headers = new httpHeaders(); headers.setContentType(APPLICATION_XML); } // Test fails @Test @DirtiesContext public void testSavePerson() { final @R_404_993@404_993@<>
@H_618_7@第一个断言失败了:
java.lang.AssertionError: Expected: "Tin Tin" but: was "Tin" Expected :Tin Tin Actual :Tin
@H_618_7@换一种说法:
>不会发生服务器端异常(状态代码为200)
> Spring成功加载了id = 1的Person实例
>但其属性不会更新有什么想法我在这里缺少什么?
注1
笔记2
更多细节
预期行为:
>加载id = 1的Person实例
>使用Jaxb2RootElementhttpmessageConverter或MappingJackson2XmlhttpmessageConverter使用XML有效内容填充加载的人员实体的属性
>将其作为人员参数传递给控制器的动作处理程序实际行为:
>加载了id = 1的Person实例
>实例的属性未更新以匹配请求有效内容中的XML
>不会更新传递给控制器的操作处理程序方法的person实例的属性
您可以这样使用它:
@PutMapping(value = "/{iD}")
public Person savePerson(@requestBody Person person,@PathVariable("id") Long id ) {
Person found = personRepository.findOne(id);
//merge 'found' from database with send person,or just send it with id
//Person merged..
return personRepository.save(merged);
}
@H_618_7@
以上是大佬教程为你收集整理的如何编写一个RestController来从XML请求更新JPA实体,Spring Data JPA方式?全部内容,希望文章能够帮你解决如何编写一个RestController来从XML请求更新JPA实体,Spring Data JPA方式?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。