在grails jax rs中的一个json中传递两个域对象

时间:2015-09-01 07:53:48

标签: json authentication grails

我使用的是jaxrs:0.10,我有一个域OrderDetails的默认生成资源。客户端将POST json包含域OrderDetails对象以及其他两个参数userNamepassword,以便只有经过身份验证的用户才会使用该资源。我只需通过发布JSON就可以直接保存到域OrderDetails的数据库,而无需验证(即JSON与域相同。)但是通过添加其他两个参数进行身份验证有点不同。如何完成这项任务,我的需求是:

1)客户端使用userName,password和OrderDetails对象发布json。 2)我需要验证OrderDetails对象的用户凭据以保存到数据库。

暂时用户凭据将是静态的。

我的域OrderDetails代码是:

class OrderDetails {

    Date orderDate
    Long orderNumber

    Float subTotal
    Float shipping
    Float discount
    Float netTotalPaid
    boolean creditApplied

    Long transactionId
    String specialInstruction
    DeliveryStatus deliveryStatus

    Long memberId
    String localOffice

    static constraints = {
        orderDate nullable: true
        orderNumber nullable: true

        subTotal nullable: true
        shipping nullable: true
        discount nullable: true
        netTotalPaid nullable: true
        creditApplied nullable: true

        transactionId nullable: true
        specialInstruction nullable: true
        deliveryStatus nullable: true

        memberId nullable: true
        localOffice nullable: true
    }
}

生成的资源是:

@Path('/api/v1/orderDetails')
@Consumes(['application/json'])
@Produces(['application/json'])
class OrderDetailsCollectionResource {

    def orderDetailsResourceService

    @POST
    Response create(OrderDetails dto) {
        created orderDetailsResourceService.create(dto)
    }

    @GET
    Response readAll() {
        ok orderDetailsResourceService.readAll()
    }

    @Path('/{id}')
    OrderDetailsResource getResource(@PathParam('id') Long id) {
        new OrderDetailsResource(orderDetailsResourceService: orderDetailsResourceService, id:id)
    }
}

并且:

@Consumes(['application/json'])
@Produces(['application/json'])
class OrderDetailsResource {

    def orderDetailsResourceService
    def id

    @GET
    Response read() {
        ok orderDetailsResourceService.read(id)
    }

    @PUT
    Response update(OrderDetails dto) {
        dto.id = id
        ok orderDetailsResourceService.update(dto)
    }

    @DELETE
    void delete() {
        orderDetailsResourceService.delete(id)
    }
}

1 个答案:

答案 0 :(得分:0)

你的包装:

<div class="intro">
    <div class="intro_container">
        <p id="hello", class="center">Content </p>
        <p id="wonder", class="center">Content</p>
        <p id="mystery", class="center">Content</p>
    </div>
</div>

<div class="main">
    <div class="main_container">
        <p>Content</p>
    </div>
<div class="list" id="left">
    <div class="list_container">
    <ul>
        <li>MenuItem</li>
        <li>MenuItem</li>
        <li>MenuItem</li>
    </ul> 
    </div>
</div>

<div class="main_content" id="right">
    <div class="main_content_container">
    <h2>title</h2>
    <p>Some content</p><br>

    <a href="test_article1.html">Read more!</a>
    </div>
</div>
<div class="img_header" id="left">
    <div class="img_header_container">
    <h3>Title</h3>
    <div class="picture">
    <a href="http://example.com" target="_blank"><img src="" id="img1"></a>

    <a href="http://example.com" target="_blank"><img src="" id="img1"></a>

    <a href="http://example.com" target="_blank"><img src="" id="img1"></a>

    <a href="http://example.com" target="_blank"><img src="" id="img1"></a>
</div>
</div>
</div>
<div class="religion" id="right">
    <div class="religion_container">
    <h2>Title</h2>
    <p>Some content</p><br>

    <a href="">Read more!</a>
    </div>
</div>

现在您需要一个AuthOrder-Json-Object而不是OrderDetails。在您的GET / PUT / DELETE-Operations中,您可以读取用户和密码,并检查是否允许它完成工作。然后传递OrderDetails-Object。

对于json-rest-authentication,我建议您阅读how-do-people-handle-authentication-for-restful-apis-technology-agnostic

编辑:@PUT的示例;

class AuthOrder {
   OrderDetails orderDetails;
   Token userToken;
   Password password;
}